Java學習:Map接口


Map集合

Collection接口: 定義了單列集合規范 Collection<E>

  • 每次存儲一個元素 單個元素

Map接口:定義了雙列集合的規范 Map<K,V>

  • 每次存儲一對元素

java.util.Map<K,V>集合

Map集合的特點:

  1. Map集合是一個雙列集合,一個元素包含兩值(一個key,一個value)
  2. Map集合中的元素,key和value的數據類型可以相同,也可以不同
  3. Map集合中的元素,key是不允許重復的,value是可以重復的
  4. 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的特點:

  1. LinkedHashMap集合底層是哈希表+鏈表(保證迭代的順序)
  2. 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 視圖。

實現步驟:

  1. 使用Map集合中的方法keySet(),把Map集合所有的key取出來,存儲到一個Set集合中。
  2. 遍歷Set集合,獲取Map集合中的每一個Key
  3. 通過Map集合中的方法get(key),通過key找到value

Entry鍵值對對象

Map.Entry<K,V>:在Map接口中有一個內部接口Entry
作用:當Map集合一創建,那么就會在Map集合中創建一個Entry對象,用來記錄鍵與值(鍵值對對象,鍵與值的映射關系)

 

Map集合遍歷的第二種方式:使用Entry對象遍歷

Set<Map.Entry<K,V> entrySet() 返回此映射中包含的鍵的 Set 視圖。
實現步驟:

  1. Set<Map.Entry<K,V>> entrySet(): 把Map集合內部的多個Entry對象取出來存儲到一個Set集合中
  2. 遍歷Set集合:獲取Set集合中的每一個Enter對象
  3. 獲取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流相結合的集合


免責聲明!

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



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