Map接口之HashSet、Hashtable、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap、EnumMap

Map用於保存具有映射關係的數據,Map裏保存着兩組數據:key和value,它們都可以使任何引用類型的數據,但key不能重複。所以通過指定的key就可以取出對應的value。Map接口定義瞭如下常用的方法:

1、void clear():刪除Map中所以鍵值對。

2、boolean containsKey(Object key):查詢Map中是否包含指定key,如果包含則返回true。

3、boolean containsValue(Object value):查詢Map中是否包含指定value,如果包含則返回true。

4、Set entrySet():返回Map中所包含的鍵值對所組成的Set集合,每個集合元素都是Map.Entry對象(Entry是Map的內部類)。

5、Object get(Object key):返回指定key所對應的value,如Map中不包含key則返回null。

6、boolean isEmpty():查詢Map是否爲空,如果空則返回true。

7、Set keySet():返回該Map中所有key所組成的set集合。

8、Object put(Object key,Object value):添加一個鍵值對,如果已有一個相同的key值則新的鍵值對覆蓋舊的鍵值對。

9、void putAll(Map m):將指定Map中的鍵值對複製到Map中。

10、Object remove(Object key):刪除指定key所對應的鍵值對,返回可以所關聯的value,如果key不存在,返回null。

11、int size():返回該Map裏的鍵值對的個數。

12、Collection values():返回該Map裏所有value組成的Collection。

Map中包含一個內部類:Entry。該類封裝了一個鍵值對,它包含了三個方法:

1、Object getKey():返回該Entry裏包含的key值。

2、Object getValeu():返回該Entry裏包含的value值。

3、Object setValue(V value):設置該Entry裏包含的value值,並返回新設置的value值。

 

HashMap和Hashtable實現類:

HashMap與HashTable的區別

1、 同步性:Hashtable是同步的,這個類中的一些方法保證了Hashtable中的對象是線程安全的。而HashMap則是異步的,因此HashMap中的對象並不是線程安全的。因爲同步的要求會影響執行的效率,所以如果你不需要線程安全的集合那麼使用HashMap是一個很好的選擇,這樣可以避免由於同步帶來的不必要的性能開銷,從而提高效率。

2、 值:HashMap可以讓你將空值作爲一個表的條目的key或value,但是Hashtable是不能放入空值的。HashMap最多隻有一個key值爲null,但可以有無數多個value值爲null。

注意:

1、用作key的對象必須實現hashCode和equals方法。

2、不能保證其中的鍵值對的順序

3、儘量不要使用可變對象作爲它們的key值。

 

 LinkedHashMap:

     它的父類是HashMap,使用雙向鏈表來維護鍵值對的次序,迭代順序與鍵值對的插入順序保持一致。LinkedHashMap需要維護元素的插入順序,so性能略低於HashMap,但在迭代訪問元素時有很好的性能,因爲它是以鏈表來維護內部順序。

 

TreeMap:

 Map接口派生了一個SortMap子接口,SortMap的實現類爲TreeMap。TreeMap也是基於紅黑樹對所有的key進行排序,有兩種排序方式:自然排序和定製排序。Treemap的key以TreeSet的形式存儲,對key的要求與TreeSet對元素的要求基本一致。

1、Map.Entry firstEntry():返回最小key所對應的鍵值對,如Map爲空,則返回null。

2、Object firstKey():返回最小key,如果爲空,則返回null。

3、Map.Entry lastEntry():返回最大key所對應的鍵值對,如Map爲空,則返回null。

4、Object lastKey():返回最大key,如果爲空,則返回null。

5、Map.Entry higherEntry(Object key):返回位於key後一位的鍵值對,如果爲空,則返回null。

6、Map.Entry lowerEntry(Object key):返回位於key前一位的鍵值對,如果爲空,則返回null。

7、Object lowerKey(Object key):返回位於key前一位key值,如果爲空,則返回null。

8、NavigableMap subMap(Object fromKey,boolean fromlnclusive,Object toKey,boolean toInciusive):返回該Map的子Map,其key範圍從fromKey到toKey。

9、SortMap subMap(Object fromKey,Object toKey );返回該Map的子Map,其key範圍從fromkey(包括)到tokey(不包括)。

10、SortMap tailMap(Object fromkey ,boolean inclusive):返回該Map的子Map,其key範圍大於fromkey(是否包括取決於第二個參數)的所有key。

11、 SortMap headMap(Object tokey ,boolean inclusive):返回該Map的子Map,其key範圍小於tokey(是否包括取決於第二個參數)的所有key。

 

WeakHashMap:

 WeakHashMap與HashMap的用法基本相同,區別在於:後者的key保留對象的強引用,即只要HashMap對象不被銷燬,其對象所有key所引用的對象不會被垃圾回收,HashMap也不會自動刪除這些key所對應的鍵值對對象。但WeakHashMap的key所引用的對象沒有被其他強引用變量所引用,則這些key所引用的對象可能被回收。WeakHashMap中的每個key對象保存了實際對象的弱引用,當回收了該key所對應的實際對象後,WeakHashMap會自動刪除該key所對應的鍵值對。

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  WeakHashMap w1=new WeakHashMap();
  //添加三個鍵值對,三個key都是匿名字符串,沒有其他引用
  w1 .put("語文", "良好");
  w1 .put("數學", "及格");
  w1 .put("英語", "中等");
  w1 .put("java", "good");//該key是一個系統緩存的字符串對象
  System.out.println(w1 );//輸出{java=good, 數學=及格, 英語=中等, 語文=良好}
  //通知系統進行垃圾回收
  System.gc();
  System.runFinalization();
  System.out.println(w1 );//輸出{java=good}
   }

 

IdentityHashMap類:

IdentityHashMap與HashMap基本相似,只是當兩個key嚴格相等時,即key1==key2時,它才認爲兩個key是相等的 。IdentityHashMap也允許使用null,但不保證鍵值對之間的順序。

 

EnumMap類:

1、EnumMap中所有key都必須是單個枚舉類的枚舉值,創建EnumMap時必須顯示或隱式指定它對應的枚舉類。

2、EnumMap根據key的自然順序,即枚舉值在枚舉類中定義的順序,來維護鍵值對的次序。

3、EnumMap不允許使用null作爲key值,但value可以。

發佈了39 篇原創文章 · 獲贊 9 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章