Map集合的實現類


 

Map的繼承關系:

 

 

 

 

Map接口的常用實現類:

 

1、HashMap、Hashtable(t是小寫)

HashMap不是線程安全的,key、value的值都可以是null。

Hashtable是線程安全的,key、value的值都不能是null。

 

HashMap、Hashtable都是無序的。

如果要使用自定義的類(未繼承Java自帶的類)作為key,需要重寫自定義類的hashCode()、equals()來保證集合中沒有重復的key。類名中含hash的集合,都要這樣。

 

因為不必保證線程安全,所以HaspMap性能比Hashtable略高。

Hashtable是很古老的一個類,命名不規范,問題較多。盡量少用Hashtable。即使要創建線程安全的Map,也盡量不要使用Hashtable,可以使用Collections工具類把HashMap變成線程安全的。

 

 

 

 

2、LinkedHashMap

LinkedHashMap是HashMap的子類,使用一個雙向鏈表來維護鍵值對的順序(與添加順序相同),維護的是key的順序。

存儲、查找仍是使用hashCode值來索引,遍歷(迭代)才使用鏈表,就是說遍歷時的順序和添加元素的順序相同。

因為內部維護了一個鏈表,所以查找、存儲時HashMap性能高於LinkedHashMap,但遍歷集合時LinkedHashMap性能較好。

 

 

 

 

3、Properties

Properties是Hashtable的子類,在處理屬性文件時特別方便。Properties的key、value都必須是String。

 

Properties類的常用方法:

String getProperty(String key)

String getProperty(String key,String defaultValue)   key不存在時,把默認的值作為value返回

Object setProperty(String key,String value)   設置屬性值。相當於Hashtable的put()

void  load(InputStream is)   從屬性文件(輸入流)中加載鍵值對到Properties對象

void store(OutputStream os,String info)   把properties中的鍵值對寫到輸出流中(一般是屬性文件)。第二個參數是對properties信息的說明。

 

實例:

1 Properties properties=new Properties();
2       properties.setProperty("name","張三");
3       //key、value都必須是String
4       properties.setProperty("age","19");  
5       //輸出鍵值對到屬性文件,一行一個鍵值對。第二個參數是對文件所保存信息的說明,會以注釋形式輸出到屬性文件的首行。a.ini默認在項目的根目錄下。
6       properties.store(new FileOutputStream("a.ini"),"student info");
7       //properties中仍有鍵值對
8       System.out.println(properties);  //{name=張三, age=19}

 

 

 

 

4、TreeMap

TreeMap類是Map接口的子接口SortedMap的實現類,用紅黑樹來存儲元素,保持集合的有序(並不是添加順序,而是按key的值排列)。

TreeMap的2中排序方式:自然排序(默認)、定制排序。

TreeMap的鍵值對(其實是key)總是處於有序狀態,調用keySet()獲取key的Set,再使用toArray()轉化為數組,這個數組就是有序的。

 

 

5、EnumMap

EnumMap的key都必須是同一個枚舉類的實例,元素的排列順序與枚舉類中的順序保持一致。

 

 

 

性能分析:

EnumMap無需維護什么,性能最好。

TreeMap一般要比HashMap、Hashtable要慢,尤其是添加、刪除鍵值對時,因為內部維護紅黑樹開銷很大。

Hashtable線程安全,所以HashMap性能要高於Hashtable。而Hashtable問題較多,一般不使用。

LinkedHashMap內部要維護一個鏈表,所以HashMap性能一般要高於LinkedHashMap。HashMap底層采用數組存儲鍵值對,查詢效率極高。大量刪除元素、遍歷集合時,LinkedHashMap性能較好。

Properties專門用於操作屬性文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM