1. 程式人生 > 其它 >|NO.Z.00061|——————————|BigDataEnd|——|Java&集合類庫.V09|----------------------------------------------|Java.v08|Map集合|

|NO.Z.00061|——————————|BigDataEnd|——|Java&集合類庫.V09|----------------------------------------------|Java.v08|Map集合|



[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集合的原理
### --- 元素放入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)