您好,登錄后才能下訂單哦!
java中的映射是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
集是一個集合,它可以快速地查找現有的元素。但是,要查看一個元素,需要有要查找元素的精確副本。這不是一種非常通用的查找方式,因為在集合中查找元素總是要遍歷集合。通常,我們知道某些鍵的信息,并想要查找與之對應的元素。映射(map)數據結構就是為此而設計的。映射用來存放鍵/值對。如果提供了鍵,就能夠查找到值。它們之間是一一對應關系。
基本映射操作:
Java類庫為映射提供了兩個通用的實現:HashMap和TreeMap,這兩個類都實現了Map接口
散列映射(HashMap)對鍵進行散列,樹映射(TreeMap)用鍵的整體順序對元素進行排序,并將其組織成搜索樹。
散列或比較函數只能作用于鍵。與鍵關聯的值不不能進行散列或比較
與集一樣,散列映射比樹映射稍微快一些,所以在不需要按照排列順序訪問鍵的時候,最好選用散列映射
OP->>要進行鍵值存儲,必須使用put方法
OP->>要進行鍵值訪問,必須使用get方法,且只能通過鍵來訪問到值
OP->>如果找不到值卻不想返回一個空對象,則使用getOrDefault(var1,var2),如果找不到值則返回var2。
鍵必須是唯一的,如果對一對映射調用兩次put方法,則后一次調用會覆蓋前一次調用。并返回第一次調用的結果
OP->>要進行鍵值對的移除,則要使用remove(鍵)的方法
OP->>要想獲取鍵值對的數量,則要使用size()方法
OP->>要迭代處理每個鍵和值,最好是使用forEach方法,可以向這個方法提供一個lambda表達式,用來依次處理映射中的每一個元素
類似于scores.forEach((k,v)->System.out.println("key="+k+",value="+v));
下面示例程序演示了映射的操作過程,首先將鍵/值對添加到映射中。然后從映射中刪除一個鍵,同時與之對應的值也被刪除了。接下來,修改與某一個鍵對應的值,并調用get方法查看這個值。最后,迭代處理條目集。
代碼:
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"); //替代一個成員 staff.put("456-62-5527", new Employee("Francesca Miller")); //查看一個成員 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+"]"; } }
運行結果:
下面是接口Map中常用的幾個方法及其解釋:
V get(Object key)
獲取與鍵對應的值;返回與鍵對應的對象,如果在映射中沒有這個對象則返回null。鍵可以為null。
default V getOrDefault(Object key,V defaultValue)
獲得與鍵關聯的值;返回與鍵關聯的對象,或者如果未在映射中找到這個鍵,則返回defaultValue。
V put(K key,V value)
將鍵與對應的值關系插入到映射中。如果這個鍵已經存在,新的對象將取代與這個鍵對應的舊對象。這個方法將返回鍵對應的舊值。如果這個鍵以前沒有出現過則返回null。鍵可以為null,但值不能為null。
void putAll(Map<? extends K,? extends V> entries)
將給定映射中所有條目添加到這個映射中。
boolean containsKey(Object key)
如果映射中已經有這個鍵,則返回true。
boolean containsValue(Object value)
如果映射中已經有這個值,返回true。
default void forEach(BiConsumer<? super K,? super V> action)
對這個映射中的所有鍵/值應用這個動作。
下面是HashMap類中的常用方法:
HashMap()
HashMap(int initialCapacity)
HashMap(int initialCapacity,float loadFactor)
用給定的容量和裝填因子構造一個空散列映射(裝填因子是一個0.0~1.0之間的一個數值。這個數值決定散列表填充百分比。一旦到了這個比例,就要將其再散列到更大的表中)。默認的裝填因子是0.75。
下面是TreeMap類中常用的方法:
TreeMap()
為實現Comparable接口的鍵構造一個空的樹映射。
TreeMap(Comparator<? super K> c)
構造一個樹映射,并使用一個指定的比較器對鍵進行排序。
TreeMap(Map<? extends K,? extends V> entries)
構造一個樹映射,并將某個映射中的所有條目添加到樹映射中。
TreeMap(SortedMap<? extends K,? extends V> entries)
構造一個樹映射,將某個有序映射中的所有條目添加到樹映射中,并使用與給定的有序映射相同的比較器。
下面是SortedMap接口的一些重要的方法:
Comparator<? super K> comparator()
返回鍵進行排序的比較器。如果鍵是用Comparable接口的comparaTo方法進行比較的,返回null。
K firstKey()
K lastKey()
返回映射中最小元素和最大元素。
關于java中的映射是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。