Java 映射(Map)和集合(Set) 用法总结
1、定義層面
Map 接口定義映射,存儲一組鍵值對的映射關(guān)系。
Set 接口定義集合,存儲一組互不相同的元素,該接口繼承了 Collection 接口。
2、Map 接口的概念和常用方法
? ? ? Map 接口存儲一組鍵值對的映射關(guān)系,映射中的每個鍵對應(yīng)一個值。映射中不能有重復(fù)的鍵,否則會出現(xiàn)一個鍵對應(yīng)多個值的情況,這違背了映射的定義。
(1)放置鍵值對
? ? ??放置鍵值對的方法有 put 和 putAll,其中 put 一次放置一個鍵值對,putAll 一次將另一個映射中的鍵值對全部添加道當(dāng)前映射中。在映射中放置鍵值對時,如果映射中沒有對應(yīng)的鍵,則在映射中新建一個鍵值對,否則用新的鍵值對覆蓋原來的相同鍵的鍵值對。
(2)刪除鍵值對
? ? ? 刪除鍵值對的方法有 remove 和 clear,其中 remove 刪除指定鍵的鍵值對,clear 刪除當(dāng)前映射中的全部鍵值對。
(3)判斷包含鍵或值
? ? ? 判斷包含鍵或值的方法有 containsKey 和 containsValue,其中 containsKey 判斷映射中是否包含指定的鍵,containsValue判斷映射中是否包含指定的值。
(4)根據(jù)鍵獲得值
? ? ? 根據(jù)鍵獲得值得方法有 get,該方法返回映射中指定鍵的值。
(5)獲得鍵或鍵值對的集合
? ? ? 獲得鍵或鍵值對的集合的方法有 entrySet 和 keySet,其中 entrySet 返回映射的所有鍵值對的集合,keySet 返回映射的所有鍵的集合。
(6)獲得值的容器
獲得值的容器的方法有 values,該方法返回映射的所有值的容器。
(7)其他方法
方法 isEmpty 判斷當(dāng)前映射是否為空(即不包含鍵值對),方法 size 返回映射中的鍵值對數(shù)目。
(8)Map 接口的實現(xiàn)類 HashMap、Hashtable 和 TreeMap
- HashMap 和 Hashtable
? ? ? ? HashMap 類是散列映射,通過散列函數(shù)計算鍵對應(yīng)的存儲位置,因此可以快速地完成放置鍵值對、刪除鍵值對、根據(jù)鍵獲得值的操作。
//初始化方法 Map<Character,Integer>change=new HashMap<Character,Integer>(){{put('I',1);put('V',5);put('X',10);put('L',50);put('C',100);put('D',500);put('M',1000);}};? ? ? JDK 1.8 之前的 HashMap 的底層通過數(shù)組和鏈表實現(xiàn),如果出現(xiàn)沖突則通過拉鏈法解決沖突。JDK 1.8 在解決沖突時的實現(xiàn)有較大變化,當(dāng)鏈表長度大于閾值(默認(rèn)為 8)時,將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時間。
? ? ? ?Hashtable 類是散列表,其功能和 HashMap 相似。以下是 HashMap 和 Hashtable 的部分區(qū)別。
? ? ? ?HashMap 不是線程安全的,Hashtable 的大多數(shù)方法用關(guān)鍵字 synchronized 修飾,因此 Hashtable 是線程安全的。在不需要保證線程安全的情況下,HashMap 的效率高于 Hashtable。
? ? ? ?HashMap 允許鍵或值為 null,只能有一個鍵為 null,可以有一個或多個鍵對應(yīng)的值為 null,Hashtable 不允許鍵或值為 null。
? ? ? ? 從 JDK 1.8 開始,HashMap 在鏈表長度大于閾值(默認(rèn)為 8)時,將鏈表轉(zhuǎn)化為紅黑樹以減少搜索時間,Hashtable 沒有這樣的機(jī)制。
- TreeMap
? ? ? ?TreeMap 是有序映射,鍵可以使用 Comparable 接口或 Comparator 接口排序。
? ? ? ?TreeMap 的底層實現(xiàn)是紅黑樹,通過紅黑樹維護(hù)映射的有序性。由于要維護(hù)映射的有序性,因此 TreeMap 的各項操作的平均效率低于 HashMap,但是 TreeMap 可以按照順序獲得鍵值對。
3、Set 接口的定義和常用方法
? ? ? ?Set 接口存儲一組互不相同的元素,一個集合中不存在兩個相等的元素。
? ? ? ?Set 接口繼承了 Collection 接口,沒有引入新的方法或常量,只是規(guī)定其實例不能包含相等的元素。
(1)Set 接口的實現(xiàn)類 HashSet 和 TreeSet
- HashSet
? ? ? ?HashSet 類是散列集合,其底層實現(xiàn)基于 HashMap。當(dāng)對象加入散列集合時,需要判斷元素是否重復(fù),首先通過方法 hashCode 計算對象的散列碼檢查是否有對象具有相同的散列碼,如果沒有相同的散列碼則沒有重復(fù)元素,否則再通過方法 equals 檢查是否有相等的對象。
? ? ? ?根據(jù)散列約定,如果兩個對象相同,它們的散列碼一定相同,因此如果在子類中重寫了 equals 方法,必須在該子類中重寫 hashCode 方法,以保證兩個相等的對象對應(yīng)的散列碼是相同的。
- TreeSet
TreeSet 類是有序集合,其底層實現(xiàn)基于 TreeMap。和 TreeMap 相似,TreeSet 可以使用 Comparable 接口或 Comparator 接口對元素排序。
總結(jié)
以上是生活随笔為你收集整理的Java 映射(Map)和集合(Set) 用法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 002 如何将电子版一寸照以照片的方式打
- 下一篇: PR视频添加字幕