Map集合
Collection接口: 定義了單列集合規范 Collection<E>
- 每次存儲一個元素 單個元素
Map接口:定義了雙列集合的規范 Map<K,V>
- 每次存儲一對元素
java.util.Map<K,V>集合
Map集合的特點:
- Map集合是一個雙列集合,一個元素包含兩值(一個key,一個value)
- Map集合中的元素,key和value的數據類型可以相同,也可以不同
- Map集合中的元素,key是不允許重復的,value是可以重復的
- Map集合中的元素,key和value是一一對應的
java.util.HashMap<K,V>集合 implements Map<K,V>接口
HashMap集合的特點:
1.HashMap集合底層是哈希值:查詢的速度特別的快
- JDK.8之前:數組+單向鏈表
- JDK.8之后:數組+單向鏈表/紅黑樹(鏈表的長度超過8):提高查詢的速度
2.HashMap集合是一個無序的集合,存儲元素和取出元素的順序有可能不一致
java.util.LinkedHashMap<k,v>集合 extends HashMap<K,V>集合
LinkedHashMap的特點:
- LinkedHashMap集合底層是哈希表+鏈表(保證迭代的順序)
- LinkedHashMap集合是一個有序的集合,存儲元素和取出元素的順序是一致的
Map接口中的常用方法
public V put (K key,V value):把指定的鍵與指定的值添加到Map集合中。
返回值:v
- 存儲鍵值對的時候,key不重復,返回值V是null
- 存儲鍵值對的時候,key重復,會使用新的value替換map中重復的value,返回被替換的value值
public V remove(Object key):把指定的值 所對應的鍵值對元素 在Map集合中刪除,返回被刪除元素的值。
返回值:V
- key存在,v返回被刪除的值
- key不存在,v返回null
public V get(Object key)根據指定的鍵,在Map集合中獲取對應的值。
返回值:
- key存在,返回對應的value值
- key不存在,返回null
boolean containsKey(Object key) 判斷集合中是否包含指定的鍵
- 包含返回true,不包含返回false
Map集合的第一種遍歷方式:通過鍵找值的方式
Map集合中的方法:
- Set<K> keySet() 返回此映射中包含的鍵的 Set 視圖。
實現步驟:
- 使用Map集合中的方法keySet(),把Map集合所有的key取出來,存儲到一個Set集合中。
- 遍歷Set集合,獲取Map集合中的每一個Key
- 通過Map集合中的方法get(key),通過key找到value
Entry鍵值對對象
Map.Entry<K,V>:在Map接口中有一個內部接口Entry
作用:當Map集合一創建,那么就會在Map集合中創建一個Entry對象,用來記錄鍵與值(鍵值對對象,鍵與值的映射關系)
Map集合遍歷的第二種方式:使用Entry對象遍歷
Set<Map.Entry<K,V> entrySet() 返回此映射中包含的鍵的 Set 視圖。
實現步驟:
- Set<Map.Entry<K,V>> entrySet(): 把Map集合內部的多個Entry對象取出來存儲到一個Set集合中
- 遍歷Set集合:獲取Set集合中的每一個Enter對象
- 獲取Entry對象中的方法:getKey()獲取key,getValue() 獲取value
HashMap存儲自定義類型鍵值
key:Person類型
- Person類型必須重寫hashCode方法和equals方法,以保證key唯一
value:String類型
- 可以重復
java.util.linkedHashMap<K,V> extends HashMap<K,V>
Map 接口的哈希表和鏈表列表實現,具有可預知的迭代順序。
底層原理:
- 哈希表+鏈表(記錄元素的順序)
Hashtable集合
java.util.Hashtable<K,V>集合 implements Map<k,V>接口
- Hashtable:底層也是一個哈希表,是一個線程安全的集合,是單線程集合,速度慢
- HashMap:底層是一個哈希表,是一個線程不安全的集合,是多線程的集合,速度快
- HashMap集合(之前學的所有集合):可以存儲null值,null鍵
- Hashtable集合:不能存儲null值,null鍵
- Hashtable集合和Vector集合一樣,在jdk1.2版本之后被更先進的集合(HashMap,ArrayList)取代了
- Hashtable的子類properties依然活躍在歷舞台
- Properties集合是一個唯一和I/O流相結合的集合