溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中的映射是什么

發(fā)布時(shí)間:2020-06-29 09:44:25 來源:億速云 閱讀:436 作者:Leah 欄目:編程語言

java中的映射是什么?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

集是一個(gè)集合,它可以快速地查找現(xiàn)有的元素。但是,要查看一個(gè)元素,需要有要查找元素的精確副本。這不是一種非常通用的查找方式,因?yàn)樵诩现胁檎以乜偸且闅v集合。通常,我們知道某些鍵的信息,并想要查找與之對應(yīng)的元素。映射(map)數(shù)據(jù)結(jié)構(gòu)就是為此而設(shè)計(jì)的。映射用來存放鍵/值對。如果提供了鍵,就能夠查找到值。它們之間是一一對應(yīng)關(guān)系。

基本映射操作:

Java類庫為映射提供了兩個(gè)通用的實(shí)現(xiàn):HashMap和TreeMap,這兩個(gè)類都實(shí)現(xiàn)了Map接口

散列映射(HashMap)對鍵進(jìn)行散列,樹映射(TreeMap)用鍵的整體順序?qū)υ剡M(jìn)行排序,并將其組織成搜索樹。

散列或比較函數(shù)只能作用于鍵。與鍵關(guān)聯(lián)的值不不能進(jìn)行散列或比較

與集一樣,散列映射比樹映射稍微快一些,所以在不需要按照排列順序訪問鍵的時(shí)候,最好選用散列映射

OP->>要進(jìn)行鍵值存儲,必須使用put方法

OP->>要進(jìn)行鍵值訪問,必須使用get方法,且只能通過鍵來訪問到值

OP->>如果找不到值卻不想返回一個(gè)空對象,則使用getOrDefault(var1,var2),如果找不到值則返回var2。

鍵必須是唯一的,如果對一對映射調(diào)用兩次put方法,則后一次調(diào)用會覆蓋前一次調(diào)用。并返回第一次調(diào)用的結(jié)果

OP->>要進(jìn)行鍵值對的移除,則要使用remove(鍵)的方法

OP->>要想獲取鍵值對的數(shù)量,則要使用size()方法

OP->>要迭代處理每個(gè)鍵和值,最好是使用forEach方法,可以向這個(gè)方法提供一個(gè)lambda表達(dá)式,用來依次處理映射中的每一個(gè)元素

類似于scores.forEach((k,v)->System.out.println("key="+k+",value="+v));

下面示例程序演示了映射的操作過程,首先將鍵/值對添加到映射中。然后從映射中刪除一個(gè)鍵,同時(shí)與之對應(yīng)的值也被刪除了。接下來,修改與某一個(gè)鍵對應(yīng)的值,并調(diào)用get方法查看這個(gè)值。最后,迭代處理?xiàng)l目集。

代碼:

package Collection.Map;
 
import java.util.*;
 
public class MapTest {
public static void main(String[] args) {
Map<String,Employee> staff=new HashMap<>();
staff.put("144-25-5464", new Employee("Amy Lee"));
staff.put("567-24-2546", new Employee("Harry Hacker"));
staff.put("157-62-7935", new Employee("Gary Cooper"));
staff.put("456-62-5527", new Employee("Francesca Cruz"));
//打印所有成員
System.out.println(staff);
//刪除某一成員
staff.remove("567-24-2546");
//替代一個(gè)成員
staff.put("456-62-5527", new Employee("Francesca Miller"));
//查看一個(gè)成員
System.out.println(staff.get("157-62-7935"));
//遍歷映射
staff.forEach((k,v)->System.out.println("key="+k+",value="+v));
}
}
 
class Employee{
String name;
 
public Employee(String name) {
this.name = name;
}
 
public String toString() {
return "[name="+name+"]";
}
}

運(yùn)行結(jié)果:

java中的映射是什么

下面是接口Map中常用的幾個(gè)方法及其解釋:

V get(Object key)

獲取與鍵對應(yīng)的值;返回與鍵對應(yīng)的對象,如果在映射中沒有這個(gè)對象則返回null。鍵可以為null。

default V getOrDefault(Object key,V defaultValue)

獲得與鍵關(guān)聯(lián)的值;返回與鍵關(guān)聯(lián)的對象,或者如果未在映射中找到這個(gè)鍵,則返回defaultValue。

V put(K key,V value)

將鍵與對應(yīng)的值關(guān)系插入到映射中。如果這個(gè)鍵已經(jīng)存在,新的對象將取代與這個(gè)鍵對應(yīng)的舊對象。這個(gè)方法將返回鍵對應(yīng)的舊值。如果這個(gè)鍵以前沒有出現(xiàn)過則返回null。鍵可以為null,但值不能為null。

void putAll(Map<? extends K,? extends V> entries)

將給定映射中所有條目添加到這個(gè)映射中。

boolean containsKey(Object key)

如果映射中已經(jīng)有這個(gè)鍵,則返回true。

boolean containsValue(Object value)

如果映射中已經(jīng)有這個(gè)值,返回true。

default void forEach(BiConsumer<? super K,? super V> action)

對這個(gè)映射中的所有鍵/值應(yīng)用這個(gè)動作。

下面是HashMap類中的常用方法:

HashMap()

HashMap(int initialCapacity)

HashMap(int initialCapacity,float loadFactor)

用給定的容量和裝填因子構(gòu)造一個(gè)空散列映射(裝填因子是一個(gè)0.0~1.0之間的一個(gè)數(shù)值。這個(gè)數(shù)值決定散列表填充百分比。一旦到了這個(gè)比例,就要將其再散列到更大的表中)。默認(rèn)的裝填因子是0.75。

下面是TreeMap類中常用的方法:

TreeMap()

為實(shí)現(xiàn)Comparable接口的鍵構(gòu)造一個(gè)空的樹映射。

TreeMap(Comparator<? super K> c)

構(gòu)造一個(gè)樹映射,并使用一個(gè)指定的比較器對鍵進(jìn)行排序。

TreeMap(Map<? extends K,? extends V> entries)

構(gòu)造一個(gè)樹映射,并將某個(gè)映射中的所有條目添加到樹映射中。

TreeMap(SortedMap<? extends K,? extends V> entries)

構(gòu)造一個(gè)樹映射,將某個(gè)有序映射中的所有條目添加到樹映射中,并使用與給定的有序映射相同的比較器。

下面是SortedMap接口的一些重要的方法:

Comparator<? super K> comparator()

返回鍵進(jìn)行排序的比較器。如果鍵是用Comparable接口的comparaTo方法進(jìn)行比較的,返回null。

K firstKey()

K lastKey()

返回映射中最小元素和最大元素。

關(guān)于java中的映射是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI