最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Map 接口案例演示

 更新時間:2025年12月02日 15:44:44   作者:扶蘇-su  
Map是Java中用于存儲鍵值對的集合接口,常見實現(xiàn)包括HashMap、TreeMap和LinkedHashMap,它允許通過鍵快速查找對應的值,這篇文章給大家介紹了Java Map接口案例演示,感興趣的朋友跟隨小編一起看看吧

Map 的介紹

Map 是 Java 中用于存儲鍵值對的集合接口,常見實現(xiàn)包括 HashMap、TreeMap 和 LinkedHashMap。它允許通過鍵快速查找對應的值。

Map 接口實現(xiàn)類的特點【很實用】

注意:這里講的是 JDK8 的 Map接口特點

        1)Map 與 Collection 并列存在。用于保存具有映射關系的數(shù)據(jù):Key-Value

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class map_ {
    public static void main(String[] args) {
        // 1)Map 與 Collection 并列存在。用于保存具有映射關系的數(shù)據(jù):Key-Value(雙列元素)
        Map map = new HashMap();
        map.put("no1", "張無忌"); // k-v
        map.put("no2","張飛"); // k-v
        System.out.println("map = " + map);
    }
}

        2)Map 中的 key 和 values 可以是任何引用類型的數(shù)據(jù),會封裝到 HashMap$Node 對象中,當有相同的 key ,就會替換掉原來的 value

        3)Map中的 key 不允許重復,原因和 HashSet 一樣

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class map_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1", "張無忌"); // k-v
        map.put("no2","張飛"); // k-v
        map.put("no1","張三豐");
        System.out.println("map = " + map);
    }
}

        4)Map 中的 value 可以重復

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class map_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1", "張無忌"); // k-v
        map.put("no2","張飛"); // k-v
        map.put("no3","張無忌");
        System.out.println("map = " + map);
    }
}

        5)Map 的 key 可以為 null,value 也可以為null,注意 key 為null,只能有一個,value 為 null,可以多個

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class map_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put(null,null);
        map.put(null,"你好");
        System.out.println("map = " + map);
    }
}

        6)常用 String 類作為 Map 的 Key   (常用的是 String 類,但也可以是其他類型, Object 的子類)

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class map_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put(1,"陽光");
        map.put(new Object(),"周芷若");
        System.out.println("map = " + map);
    }
}

        7)key 和 value 之間存在單向一對關系,即通過 get 方法,指定的 key 總能找到對應的 value

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class map_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put(1,"陽光");
        map.put(new Object(),"周芷若");
        map.put("no1","金毛獅王");
        map.put(22.0,"小龍女");
        map.put("no2","abcd");
        System.out.println("map = " + map);
        // 通過 get 方法,傳入 key,返回相應的 value
        System.out.println(map.get("no2"));
    }
}

        8)Map 存放數(shù)據(jù)的 key-value 示意圖,一對 k - y是放在一個 HashMap$Node 中的,有因為 Node 實現(xiàn)了 Entry 接口,有些書上也說 一對 k - y 就是一個 Entry(如圖)

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class map_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("first", "賈寶玉");
        map.put("Second", "林黛玉");
        // 解讀
        // 1. k-v 最后是 HashMap$Node node = newNode(hash , key , value , null)
        // 2. k-v 為了程序員遍歷,還會創(chuàng)建 EntrySet 集合,該集合存放的元素的類型 Entry ,而一個 Entry
        // 對象就有 k-v EntrySet<Entry<k,v>>,即:transient Set<Map.Entry<k,v>> entrySet;
        // 3. entrySet 中,定義的類型是 Map.Entry,但是實際上存放的還是HashMap$Node
        // 這是因為 static class Node<k,v> implements Map.Entry<k.v>
        // 4. 當把 HashMap$Node 對象 存放到 entrySet 就方便我們的遍歷
        // k getKey()  v getValue()
        Set set = map.entrySet();
        System.out.println(set.getClass()); // HashMap$Node
        for (Object obj : set) {
            // System.out.println(obj.getClass());
            // 為了從HashMap$Node 中取出 k-v
            // 1. 先做一個向下轉(zhuǎn)型
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() + "-" + entry.getValue());
        }
    }
}

Map接口和常用方法

        1)put 添加

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put(null,"書籍");
        System.out.println("map = " + map);
    }
}

        2)remove 根據(jù)鍵刪除映射關系

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put("交通工具","地鐵");
        map.put(null,"書籍");
        System.out.println("map = " + map);
        map.remove(null);
        System.out.println("使用 remove 方法后的 map = " + map);
    }
}

        3)get 根據(jù)鍵獲取值

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put("交通工具","地鐵");
        Object value = map.get("交通工具");
        System.out.println(value); //通過 key 得到 value
    }
}

        4)size獲取元素個數(shù)

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put("交通工具","地鐵");
        System.out.println(map.size());
    }
}

        5)isEmpty 判斷個數(shù)是否為0

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put("交通工具","地鐵");
        System.out.println(map.isEmpty());
    }
}

        6)clear 清除

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put("交通工具","地鐵");
        map.clear();
        System.out.println("map = " + map);
    }
}

        7)containsKey 查找鍵是否存在

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put("交通工具","地鐵");
        System.out.println(map.containsKey("蔬菜")); // 返回 true
    }
}

Map 遍歷方式案例演示

        1)containsKey  查找鍵是否存在

        2)keySet 獲取所有的鍵

package com.heima.Hello.Map_;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("水果","蘋果");
        map.put("蔬菜","西蘭花");
        map.put("蔬菜","蘿卜");
        map.put("交通工具","地鐵");
        map.put("糕點","吐司");
        System.out.println("map = " + map);
        // 先取出所有的 key,再通過 key 取出對應的 value
        Set key_set = map.keySet();
    }
}

        3)entrySet 獲取所有的鍵

        4)values 獲取所有的值

HashMap 底層機制及源碼剖析

擴容機制 [ 和 HashSet 相同 ]

        1)HashMap 底層維護了 Node 類型的數(shù)據(jù) table,默認為 null

        2)當創(chuàng)建對象時,將加載因子(loadfactor)初始化為 0.75

        3)當添加 key-val 時,通過 key 的哈希值得到在 table 的索引。然后判斷該索引是否有元素,如果沒有元素直接添加。如果該索引處有元素,繼續(xù)判斷該元素的 key 和準備加入的 key 是否相等,如果相等,則直接替換 val ;如果不相等需要判斷是樹結(jié)構還是鏈表結(jié)構,做出相應處理。如果添加時發(fā)現(xiàn)容量不夠,則需要擴容。

        4)第一次添加,則需要擴容 table 容量為 16,臨界值(threshold)為 12(16*0.75)

        5)以后再擴容,則需要擴容 table 容量為原來的 2 倍(32),臨界值為原來的 2 倍,即 24,依次類推。

        6)在 Java 8 中,如果一條鏈表的元素個數(shù)超過 TREEIFY_THRESHOLD(默認是 8),并且 table 的大小 >= MIN_TREEIFY_CAPACITY(默認64),就會進行樹化(紅黑樹)

總結(jié)—開發(fā)中如何中如何選擇集合實現(xiàn)類(記?。?/h2>

        在開發(fā)中,選擇什么集合實現(xiàn)類,主要取決于業(yè)務操作特點,然后根據(jù)集合實現(xiàn)類特性進行選擇,分析如下:

        1)先判斷存儲的類型(一組對象[單列]或一組鍵值對 [雙列] )

        2)一組對象:Collection 接口

                允許重復 :List

                        增刪多:LinkedList [ 底層維護了一個雙向鏈表 ]

                        改查多:ArrayList [ 底層維護 Object 類型的可變數(shù)組 ]

                不允許重復:Set

                        無序:HashSet [ 底層是 HashMap,維護了一個哈希表,即(數(shù)組 + 鏈表 + 紅黑樹)]

                        排序:TreeSet

package com.heima.Hello.Map_;
import java.util.Comparator;
import java.util.TreeSet;
@SuppressWarnings({"all"})
public class TreeSet_ {
    public static void main(String[] args) {
        // 解讀
        //1. 當我們使用無參構造器,創(chuàng)建 TreeSet 時,仍然是無序的
        //2. 希望添加的元素,按照字符串大小來排序
        //3. 使用 TreeSet 提供一個構造器,可以傳入一個比較器(原名內(nèi)部類)
        //   并指定排序規(guī)則
        //4. 簡單看看源碼
        TreeSet treeSet = new TreeSet(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                // 下面這句話是調(diào)用 String 類的 compare方法進行字符串比較
                return ((String) o1).compareTo((String) o2);
            }
        });
        treeSet.add("a");
        treeSet.add("tree");
        treeSet.add("hello");
        treeSet.add("world");
        System.out.println("treeset: " + treeSet);
    }
}

                        插入和取出順序一致:LinkedHashSet。維護數(shù)組 + 雙向鏈表

        3)一組鍵值對:Map

                        鍵無序:HashMap [底層是:哈希表 jdk 7:數(shù)組 + 鏈表,jdk 8:數(shù)組 + 鏈表 + 紅黑樹]

                        鍵排序:TreeMap

                        鍵插入和取出順序一致:LinkedHashMap

                        讀取文件 Properties

到此這篇關于Java Map 接口案例演示的文章就介紹到這了,更多相關Java Map 接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談xml配置spring profiles的幾個注意點

    淺談xml配置spring profiles的幾個注意點

    這篇文章主要介紹了淺談xml配置spring profiles的幾個注意點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Java中?springcloud.openfeign應用案例解析

    Java中?springcloud.openfeign應用案例解析

    使用OpenFeign能讓編寫Web?Service客戶端更加簡單,使用時只需定義服務接口,然后在上面添加注解,OpenFeign也支持可拔插式的編碼和解碼器,這篇文章主要介紹了Java中?springcloud.openfeign應用案例解析,需要的朋友可以參考下
    2024-06-06
  • Spring Cloud Consul實現(xiàn)選舉機制的代碼工程

    Spring Cloud Consul實現(xiàn)選舉機制的代碼工程

    Spring Cloud Consul 是 Spring Cloud 提供的對 HashiCorp Consul 的支持,它是一種基于服務網(wǎng)格的工具,用于實現(xiàn)服務注冊、發(fā)現(xiàn)、配置管理和健康檢查,本文給大家介紹了如何用Spring Cloud Consul實現(xiàn)選舉機制,需要的朋友可以參考下
    2024-11-11
  • springmvc+mybatis 做分頁sql 語句實例代碼

    springmvc+mybatis 做分頁sql 語句實例代碼

    本文通過一段實例代碼給大家介紹了springmvc+mybatis 做分頁sql 語句的方法,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-07-07
  • java 實現(xiàn)隨機數(shù)組輸出及求和實例詳解

    java 實現(xiàn)隨機數(shù)組輸出及求和實例詳解

    這篇文章主要介紹了java 實現(xiàn)隨機數(shù)組輸出及求和實例詳解的相關資料,需要的朋友可以參考下
    2016-11-11
  • maven國內(nèi)鏡像配置的方法步驟

    maven國內(nèi)鏡像配置的方法步驟

    這篇文章主要介紹了maven國內(nèi)鏡像配置的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java中數(shù)組array和列表list相互轉(zhuǎn)換

    Java中數(shù)組array和列表list相互轉(zhuǎn)換

    這篇文章主要介紹了Java中數(shù)組array和列表list相互轉(zhuǎn)換,在Java中,可以將數(shù)組(array)和列表(list)相互轉(zhuǎn)換,但需要注意一些細節(jié)和限制,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • SpringBoot集成Shiro+JWT(Hutool)完整代碼示例

    SpringBoot集成Shiro+JWT(Hutool)完整代碼示例

    Apache Shiro是一個強大且易用的Java 安全框架,提供了認證、授權、加密和會話管理功能,在現(xiàn)代應用開發(fā)中,Shiro 因其簡單性和靈活性而被廣泛采用,下面通過本文給大家介紹SpringBoot集成Shiro+JWT(Hutool)完整代碼示例,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Java深入講解SPI的使用

    Java深入講解SPI的使用

    SPI英文全稱為Service Provider Interface,顧名思義,服務提供者接口,它是jdk提供給“服務提供廠商”或者“插件開發(fā)者”使用的接口
    2022-06-06
  • RocketMQ源碼分析之Broker過期消息清理機制

    RocketMQ源碼分析之Broker過期消息清理機制

    這篇文章主要為大家介紹了RocketMQ源碼分析之Broker過期消息清理機制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論

余庆县| 巴林左旗| 威远县| 尉氏县| 梁山县| 门源| 抚宁县| 古田县| 岳阳县| 黎平县| SHOW| 卓资县| 富蕴县| 手机| 勃利县| 蓬安县| 乳源| 吴旗县| 德安县| 西华县| 济阳县| 浏阳市| 青川县| 乐亭县| 盐边县| 洮南市| 哈尔滨市| 从化市| 鸡西市| 兴国县| 易门县| 文山县| 宾川县| 隆化县| 左贡县| 龙江县| 益阳市| 江油市| 泽库县| 福清市| 米泉市|