>[success] # java.util.Map

1. `java.util.Map<K,V>`集合中存取元素的基本單位是:單對元素,其中類型參數如下:
* **K** - 此映射所維護的鍵(Key)的類型,相當于目錄。
* **V** - 映射值(Value)的類型,相當于內容。
2. 該集合中**key是不允許重復**的,而且**一個key只能對應一個value**
3. **主要實現**類有:`HashMap`類、`TreeMap`類、`LinkedHashMap`類、`Hashtable`類、`Properties`類
* **HashMap類**的底層是采用**哈希表進行數據管理**的
* **TreeMap類**的底層是采用**紅黑樹進行數據管理**的
* **LinkedHashMap類**內部維護了一個**雙向鏈表**,鏈表中記錄了元素的迭代順序,也就是元素插入集合中的先后順序,因此便于迭代
* **Hashtable類**與**HashMap類**相比屬于**線程安全**的類,且**不允許null作為key或者value的數值**
* **Properties類是Hashtable類的子類**,該對象用于處理屬性文件,key和value都是String類型的
4. **Map集合是面向查詢優化的數據結構, 在大數據量情況下有著優良的查詢性能**
5. 經常用于根據**key檢索value**的業務場景
>[danger] ##### 常用方法
|方法聲明 |功能介紹|
| -- |--|
|V put(K key, V value)| 將Key-Value對存入Map,若集合中已經包含該Key,則替換該Key所對應的Value,返回值為該Key原來所對應的Value,若沒有則返回null|
|V get(Object key) |返回與參數Key所對應的Value對象,如果不存在則返回null|
|boolean containsKey(Object key);|判斷集合中是否包含指定的Key|
|boolean containsValue (Object value);|判斷集合中是否包含指定的Value|
|V remove(Object key) |根據參數指定的key進行刪除|
|Set keySet() |返回此映射中包含的鍵的Set視圖|
|Collection values()| 返回此映射中包含的值的Set視圖|
|Set<Map.Entry<K,V>> entrySet()| 返回此映射中包含的映射的Set視圖|
~~~
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
// put 添加元素
String str = map.put("1", "11");
System.out.println(str); // null 如果添加key 不存在怎返回null
map.put("2", "22");
map.put("3", "33");
System.out.println(map); // {1=11, 2=22, 3=33} 自動調用toString 方法
// 修改元素
str = map.put("2", "6666"); // 如果key 存在則修改
System.out.println(str); // 22 key 存在獲取修改前的對應value 值
System.out.println(map); // {1=11, 2=6666, 3=33} 自動調用toString 方法
// containsKey 查找map中 key 是否存在
boolean b1 = map.containsKey("1");
System.out.println(b1); // true
// containsValue 查找map中 value 是否存在
b1 = map.containsValue("1");
System.out.println(b1);// false
// get 根據key 獲取value
String val = map.get("1");
System.out.println(val); // 11
val = map.get("123");
System.out.println(val); // null 查找的值不存在
// 刪除元素
str = map.remove("1");
System.out.println("被刪除的value是:" + str); // 被刪除的value是:11
System.out.println("map = " + map); // map = {2=6666, 3=33}
// keySet 獲取所有key - 遍歷所有key
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println(key); // 2 3
}
// 獲取所有value - 打印所有value
Collection<String> co = map.values();
for (String ts : co) {
System.out.println("ts = " + ts); // ts = 6666 ts = 33
}
// entrySet 獲取鍵值對
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> me : entries) {
System.out.println(me); // 2=6666 3=33
}
}
}
~~~
>[danger] ##### 原理
1. 使用元素的**key調用hashCode方法獲取對應的哈希碼值**,再由某種哈希算法計算在數組中的索引位置。
2. 若該位置**沒有元素**,則將該鍵值對直接放入即可。
3. 若該位置**有元素**,則使用key與已有元素依次比較哈希值,若哈希值不相同,則將該元素直接放入。
4. 若key與**已有元素的哈希值相同**,則使用key調用equals方法與已有元素依次比較。
5. 若**相等**則將對應的value修改,否則將鍵值對直接放入即可
- windows -- 環境變量
- Vscode -- 編寫java
- 初始java
- java -- 關鍵字
- 編寫第一個java程序
- java -- 注釋
- 計算機存儲 -- 進制
- java -- 類型
- java -- 變量
- 數字類型
- 布爾類型
- 字符類型
- 類型轉換
- 雙等比較是什么
- java -- 運算符
- 算數運算符
- 字符串拼接
- 關系/比較運算符
- 自增減運算符
- 邏輯運算符
- 三目運算
- 賦值運算符
- 移位運算符
- 位運算符
- 運算符優先級
- java -- 流程控制語句
- if /else if /if -- 判斷
- switch case分支結構
- for -- 循環
- 用雙重for循環
- while -- 循環
- do while -- 循環
- 案例練習
- java -- 數組
- 數組的存儲
- 數組的增刪改查
- 數組的特點
- 數組案例
- 二維數組
- 數組的工具方法
- java -- 方法
- java -- 方法的重載
- java -- 方法的調用流程
- java -- 類方法傳參注意事項
- java -- 方法練習案例
- 對比 return break continue
- for each循環
- java -- 基礎練習
- java -- 面向對象
- java -- 創建類和對象
- java -- 訪問控制符
- java -- 類成員方法
- java -- 構造方法
- java -- this
- java -- 封裝
- java -- 對象內存圖
- java -- 創建對象案例
- java -- static
- java -- 繼承
- super -- 關鍵字
- java -- 構造塊和靜態代碼塊
- java -- 重寫
- java -- final
- java -- 多態
- java -- 抽象類
- java -- 接口
- 引用類型數據轉換
- 綜合案例
- java -- 內部類
- java -- 回調模式
- java -- 枚舉類型
- java -- switch 使用枚舉
- java -- 枚舉方法使用
- java -- 枚舉類實現接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 遞歸練習
- java -- 設計模式
- 單例模式
- java -- 注解
- java -- 元注解
- Java -- 核心類庫
- java -- 處理字符串
- Java -- String
- String -- 常用方法
- String -- 正則
- Java -- StringBuilder 和 StringBuffer
- 知識點
- Java -- StringJoiner 字符串拼接
- 練習題
- 字符串的總結
- Java -- 包裝類
- Integer
- Double
- Boolean
- Character
- java -- 集合類
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 獲取當前時間戳
- Java -- 異常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法