|NO.Z.00061|——————————|BigDataEnd|——|Java&集合類庫.V09|----------------------------------------------|Java.v08|Map集合|
阿新 • • 發佈:2022-04-04
[BigDataJava:Java&集合類庫.V09] [BigDataJava.核心類庫] [|章節五|集合類庫|Map集合|]
一、Map集合
### --- Map集合
~~~ [Map集合的概念]——[元素放入HashMap集合的過程]——[Map集合實現元素的查詢和刪除操作]
~~~ [Map集合的三種遍歷方式]
### --- 基本概念 ——> java.util.Map<K,V>集合中存取元素的基本單位是:單對元素,其中型別引數如下: ——> K - 此對映所維護的鍵(Key)的型別,相當於目錄。 ——> V - 對映值(Value)的型別,相當於內容。 ——> 該集合中key是不允許重複的,而且一個key只能對應一個value。
二、常用的方法~~~ # 該集合的主要實現類有: ——> HashMap類、TreeMap類、LinkedHashMap類、Hashtable類、Properties類。 ——> 其中HashMap類的底層是採用雜湊表進行資料管理的。 ——> 其中TreeMap類的底層是採用紅黑樹進行資料管理的。 ——> 其中LinkedHashMap類與HashMap類的不同之處在於內部維護了一個雙向連結串列, ——> 連結串列中記錄了元素的迭代順序,也就是元素插入集合中的先後順序,因此便於迭代。 ——> 其中Hashtable類是古老的Map實現類,與HashMap類相比屬於執行緒安全的類, ——> 且不允許null作為key或者value的數值。 ——> 其中Properties類是Hashtable類的子類,該物件用於處理屬性檔案, ——> key和value都是String型別的。 ——> Map集合是面向查詢優化的資料結構, 在大資料量情況下有著優良的查詢效能。 ——> 經常用於根據key檢索value的業務場景。
方法宣告 | 功能介紹 |
V put(K key, V value) | 將Key-Value對存入Map,若集合中已經包含該Key, 則替換該Key所對應的Value, 返回值為該Key原來所對應的Value,若沒有則返回null |
V get(Object key) | 返回與引數Key所對應的Value物件,如果不存在則返回null |
booleancontainsKey(Objectkey); | 判斷集合中是否包含指定的Key |
booleancontainsValue(Object value); | 判斷集合中是否包含指定的Value |
V remove(Object key) |
根據引數指定的key進行刪除 |
Set keySet() | 返回此對映中包含的鍵的Set檢視 |
Collection values() | 返回此對映中包含的值的Set檢視 |
Set<Map.Entry<K,V>>entrySet() | 返回此對映中包含的對映的Set檢視 |
### --- 元素放入HashMap集合的原理
——> 使用元素的key呼叫hashCode方法獲取對應的雜湊碼值,
——> 再由某種雜湊演算法計算在陣列中的索引位置。
——> 若該位置沒有元素,則將該鍵值對直接放入即可。
——> 若該位置有元素,則使用key與已有元素依次比較雜湊值,若雜湊值不相同,
——> 則將該元素直接放入。
——> 若key與已有元素的雜湊值相同,則使用key呼叫equals方法與已有元素依次比較。
——> 若相等則將對應的value修改,否則將鍵值對直接放入即可。
四、相關的常量
### --- 相關的常量
——> DEFAULT_INITIAL_CAPACITY : HashMap的預設容量是16。
——> DEFAULT_LOAD_FACTOR:HashMap的預設載入因子是0.75。
——> threshold:擴容的臨界值,該數值為:容量*填充因子,也就是12。
——> TREEIFY_THRESHOLD:若Bucket中連結串列長度大於該預設值則轉化為紅黑樹儲存,
——> 該數值是8。
——> MIN_TREEIFY_CAPACITY:桶中的Node被樹化時最小的hash表容量,該數值是64。
五、set集合轉換為map的原理六、程式設計程式碼
package com.yanqi.task15;
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) {
// 1.準備一個Map集合並列印
Map<String, String> m1 = new HashMap<>();
// 自動呼叫toString方法,預設列印格式為:{key1=value1, key2=value2, ...}
System.out.println("m1 = " + m1); // {啥也沒有}
// 2.向集合中新增元素並列印
String str1 = m1.put("1", "one");
System.out.println("原來的value數值為:" + str1); // null
System.out.println("m1 = " + m1); // {1=one}
str1 = m1.put("2", "two");
System.out.println("原來的value數值為:" + str1); // null
System.out.println("m1 = " + m1); // {1=one, 2=two}
str1 = m1.put("3", "three");
System.out.println("原來的value數值為:" + str1); // null
System.out.println("m1 = " + m1); // {1=one, 2=two, 3=three}
// 實現了修改的功能
str1 = m1.put("1", "eleven");
System.out.println("原來的value數值為:" + str1); // one
System.out.println("m1 = " + m1); // {1=eleven, 2=two, 3=three}
System.out.println("-------------------------------------------------------------");
// 3.實現集合中元素的查詢操作
boolean b1 = m1.containsKey("11");
System.out.println("b1 = " + b1); // false
b1 = m1.containsKey("1");
System.out.println("b1 = " + b1); // true
b1 = m1.containsValue("one");
System.out.println("b1 = " + b1); // false
b1 = m1.containsValue("eleven");
System.out.println("b1 = " + b1); // true
String str2 = m1.get("5");
System.out.println("str2 = " + str2); // null
str2 = m1.get("3");
System.out.println("str2 = " + str2); // three
System.out.println("-------------------------------------------------------------");
// 4.實現集合中元素的刪除操作
str2 = m1.remove("1");
System.out.println("被刪除的value是:" + str2); // eleven
System.out.println("m1 = " + m1); // {2=two, 3=three}
System.out.println("-------------------------------------------------------------");
// 5.獲取Map集合中所有的key並組成Set檢視
Set<String> s1 = m1.keySet();
// 遍歷所有的key
for (String ts : s1) {
System.out.println(ts + "=" + m1.get(ts));
}
System.out.println("-------------------------------------------------------------");
// 6.獲取Map集合中所有的Value並組成Collection檢視
Collection<String> co = m1.values();
for (String ts : co) {
System.out.println("ts = " + ts);
}
System.out.println("-------------------------------------------------------------");
// 7.獲取Map集合中所有的鍵值對並組成Set檢視
Set<Map.Entry<String, String>> entries = m1.entrySet();
for (Map.Entry<String, String> me : entries) {
System.out.println(me);
}
}
}
七、編譯列印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=65138:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task15.MapTest
m1 = {}
原來的value數值為:null
m1 = {1=one}
原來的value數值為:null
m1 = {1=one, 2=two}
原來的value數值為:null
m1 = {1=one, 2=two, 3=three}
原來的value數值為:one
m1 = {1=eleven, 2=two, 3=three}
-------------------------------------------------------------
b1 = false
b1 = true
b1 = false
b1 = true
str2 = null
str2 = three
-------------------------------------------------------------
被刪除的value是:eleven
m1 = {2=two, 3=three}
-------------------------------------------------------------
2=two
3=three
-------------------------------------------------------------
ts = two
ts = three
-------------------------------------------------------------
2=two
3=three
Process finished with exit code 0
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)