java集合Map
常用的子類
一、介紹
Map
是保存偶對象的集合,也就是以(key = value
)鍵值對的形式保存的,這樣就可以根據 key
獲取 value
。collection
接口保存數據的主要目的是輸出,而 Map
保存數據的目的是實現 key
查找 value
的字典功能。雖然 Map
也可以進行輸出操作,但是這樣操作在開發中使用不多。
常用的Map
子類有 HashMap
、Hashtable
、concurrentHashMap
、TreeMap
、 IdentityHashMap
,LinkedHashMap
。
二、Map
接口常用的方法
編號 | 方法名稱 | 描述 |
---|---|---|
1 | V put(K key, V value); |
向集合中保存數據 |
2 | V get(Object key); |
根據 key 查找對應的value數據 |
3 | Set<Map.Entry<K, V>> entrySet(); |
將 map 集合轉換爲 Set 集合 |
4 | Set<K> keySet(); |
取出全部 key |
二、HashMap
- 定義
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {}
HashMap
特點
使用 HashMap
定義的 Map
集合是無序存放的。
如果發現重複的 key
會將新的數據替換掉已有的數據。
使用 HashMap
子類保存數據時,key
或 value
可以保存爲null
。
HashMap
是非線程安全的,只是用於單線程環境下,多線程環境下可以採用concurrent
併發包下的concurrentHashMap
。
三、Hashtable
- 定義
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {}
Hashtable
和 HashMap
很相似,不同之處是 Hashtable
線程是安全的,key
不允許設置爲 null
。
四、TreeMap
- 定義
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable{}
- 特點
可以排序的Map集合,按集合中的key排序,key不允許重複 。
最終保存在Map中的數據是經過排序的數據,按其key排序
五、 IdentityHashMap
- 定義
public class IdentityHashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, java.io.Serializable, Cloneable{}
IdentityHashMap
集合允許key
值重複
- 範例
public static void main(String[] args) {
Map<String,Object> map =new IdentityHashMap<String,Object>();
map.put(new String("xx"),"first");
map.put(new String("xx"),"second");
System.out.println(map);
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.print(entry.getKey() +" ");
System.out.println(entry.getValue());
}
System.out.println("idenMap="+map.containsKey("xx"));
System.out.println("idenMap="+map.get("xx"));
}
輸出結果
{xx=second, xx=first}
xx second
xx first
idenMap=false
idenMap=null
六、LinkedHashMap
- 定義
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>{}
LinkedHashMap
是HashMap
的一個子類,保存了記錄的插入順序,因此在遍歷的時候會比HashMap
效率要低。
不過也有例外情況,當HashMap
容量很大,實際存儲的數據較少時,遍歷起來可能會比LinkedHashMap
要慢,因
爲LinkedHashMap
的遍歷速度只和實際數據有關,和容量無關,而HashMap
的遍歷速度和他的容量有關。
HashMap
和LinkedHashMap
使用場景
一般情況下,在Map
中插入、刪除和定位元素,HashMap
是最好的選擇。如果需要元素輸出的順序和輸入的相
同,就需要選擇LinkedHashMap
了。