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

Java?Map雙列集合使代碼更高效

 更新時間:2023年12月05日 09:48:15   作者:云端源想  
這篇文章主要介紹了Java?Map雙列集合使用,使你的代碼更高效,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Map雙列集合

Map是一種雙列集合,一個元素包含兩個值,一個是Key,一個是Value。Map集合中的元素,key和value的數(shù)據(jù)類型可以相同,也可以不同。一個映射不能包含重復的鍵;每個鍵最多只能有一個值。

今天我們繼續(xù)探索Java集合的世界,這次我們要聊的主題是——雙列集合Map。

首先,讓我們來理解一下什么是雙列集合。在Java中,集合是一種用于存儲對象的容器,而雙列集合則是一種可以同時通過兩個鍵(Key)來訪問元素的集合。聽起來有些復雜?別擔心,接下來我會用最簡單的語言,帶你走進Map的世界。

概述

現(xiàn)實生活中,我們常會看到這樣的一種集合:IP地址與主機名,身份證號與個人,學號與學生等,這種一一對應的關系,就叫做映射。Java提供了專門的集合類用來存放這種對象關系的對象,即java.util.Map接口。

Map 接口下的集合與Collection 接口下的集合,他們的存儲形式有所不同,如下圖:


Collection 集合,元素是獨立的,存儲的元素是一個一個的存儲。Map中的集合,元素是成對出現(xiàn)。每個元素由鍵與值兩部分組成,通過鍵可以找到所對應的值。所以 我們前面所說 Collection是單列集合,而Map 成為雙列集合。

需要注意,Map中的鍵不能重復,值可以重復,并且每個鍵只能對應一個值。

Map 常用子類

Map 接口也有很多子類,這里我們主要講解常用的HashMap集合,LinkedHashMap集合。

HashMap<K,V>: 存儲數(shù)據(jù)采用哈希表結(jié)構(gòu),元素的存取順序不能保證一致。

由于要保證鍵的唯一,不重復,需要重寫鍵的hashCode()方法,equals()方法。我們之前所學的HashSet 底層,實際上也是new了一個HashMap,但是只是使用了 HashMap中的 K,所以HashSet是不允許重復值的。

LinkedHashMap<K,V>:HashMap下有個子類LinkedHashMap,存儲數(shù)據(jù)采用的哈希表結(jié)構(gòu)+鏈表結(jié)構(gòu)。

通過鏈表結(jié)構(gòu)可以保證元素的存取順序一致;通過哈希表結(jié)構(gòu)可以保證的鍵的唯一、不重復,需要重寫鍵的hashCode()方法、equals()方法。

Set與Map之間的關系非常密切,從java 源碼來看,java是先實現(xiàn)了Map,然后通過包裝一個所有value都為null的Map,就實現(xiàn)了Set集合。

Map 接口中的常用方法

Map接口中定義了很多方法,常用的如下:

添加、刪除、修改操作

  • Object put(Object key,Object value):將指定key-value添加到(或修改)當前map對象中
  • void putAll(Map m):將m中的所有key-value對存放到當前map中
  • Object remove(Object key):移除指定key的key-value對,并返回value

void clear():清空當前map中的所有數(shù)據(jù) public class Demo1Map {

public static void main(String[ ] args) {
        //  ○ Object put(Object key,Object value):將指定key-value添加到(或修 改)當前map對象中
        //  ○ void putAll(Map m):將m中的所有key-value對存放到當前map中
        //  ○ Object remove(Object key):移除指定key的key-value對,并返回value
        //  ○ void clear():清空當前map中的所有數(shù)據(jù)
        //創(chuàng)建集合對象
        Map<String, Student> studentMap = new HashMap<>();
        //將對應的對象放到map中
        studentMap.put("N001", new Student("叮當", 7));
        studentMap.put("N002", new Student("糖糖", 7));
        studentMap.put("N003", new Student("熙熙", 7));
        //remove
        studentMap.remove("N002");
        System.out.println("remove==" + studentMap);
        //put
        studentMap.put("N004", new Student("狗蛋", 7));
        System.out.println("put==" + studentMap);
        //putAll 如果鍵重復,會把原map中的節(jié)點替換
        Map<String, Student> studentMap2 = new HashMap<>();
        studentMap.put("N001", new Student("一一", 7));
        studentMap.put("N002", new Student("陌陌", 7));
        studentMap.putAll(studentMap2);
        System.out.println("putAll == " + studentMap);
        //clear
        studentMap.clear();
        System.out.println("clear == " + studentMap);
    }
}

元素查詢的操作

  • Object get(Object key):獲取指定key對應的value
  • boolean containsKey(Object key):是否包含指定的key
  • boolean containsValue(Object value):是否包含指定的value
  • int size():返回map中key-value對的個數(shù)
  • boolean isEmpty():判斷當前map是否為空

boolean equals(Object obj):判斷當前map和參數(shù)對象obj是否相等

public class Demo2Map {
    public static void main(String[ ] args) {
        //創(chuàng)建集合對象
        Map<String, Student> studentMap = new HashMap<>();
        //將對應的對象放到map中
        studentMap.put("N001", new Student("叮當", 7));
        studentMap.put("N002", new Student("糖糖", 7));
        studentMap.put("N003", new Student("熙熙", 7));
        //get
        Student n001 = studentMap.get("N001");
        System.out.println("001==" + n001 );
        //containsKey
        boolean isContainsKey = studentMap.containsKey("N002");
        System.out.println("containsKey結(jié)果 == " + isContainsKey);
        //containsValue
        boolean containsValue = studentMap.containsValue(new Student("熙熙", 7));
        System.out.println("containsValue結(jié)果 == " + containsValue);
        //size
        int size = studentMap.size();
        System.out.println("size == "+ size);
        //isEmpty
        boolean isEmpty = studentMap.isEmpty();
        System.out.println("isEmpty == " + isEmpty);
        //equals
        boolean equals = studentMap.get("N002").equals(new Student("糖糖", 7));
        System.out.println("equals == " + equals);
    }
}

Map 集合遍歷

Map接口沒有繼承 接口 Iterable ,所以遍歷不能直接使用 迭代器和增強for循環(huán)。

那它如何遍歷呢? 我們知道,Map中存放的是兩種對象 Key對象 & Value對象,他們在Map中是一一對應的,這一對對象合起來在Map集中稱為 Entry 對象,也稱之為鍵值對象。
而我們在遍歷Map集合時,就可以從每一個鍵值對對象中獲取對應的鍵,然后找到對應的值。

鍵找值方式

在Map 集合中,為我們提供了一個方法

  • keySet() 獲取Map中所有的鍵,由于鍵是唯一的,所以返回一個Set集合存儲所有的鍵`。
    那我們就可以遍歷這個Set集合,通過 Entry的方法
  • public V getValue():獲取Entry對象中的Value值。

鍵值對方式

在Map集合中也提供了獲取所有Entry對象的方法:

public Set<Map.Entry<K,V>> entrySet(): 獲取到Map集合中所有的鍵值對對象的集合(Set集合)。

那我們就 可以通過這個方法,獲取Map集合中,所有的鍵值對(Entry)對象的 Set集合,然后遍歷包含Entry對象的Set集合,得到每一個Entry對象。通過鍵值對(Entry)對象,獲取Entry對象中的鍵與值。 

方法提示:getkey() getValue()

public class Demo3Map {
        public static void main(String[ ] args) {
                //方法一:keySet遍歷key+value:
                //創(chuàng)建集合對象
                Map<String, Student> studentMap = new HashMap<>();
                //將對應的對象放到map中
                studentMap.put("N001", new Student("叮當", 7));
                studentMap.put("N002", new Student("糖糖", 7));
                studentMap.put("N003", new Student("熙熙", 7));
                //獲取 map集合中的所有key
                Set<String> strings = studentMap.keySet();
                //遍歷 key的集合,通過get()獲取沒一個value
                for (String key : strings) {
                    Student student = studentMap.get(key);
                    System.out.println("studentmap == key="+key+" value="+ student);
                }
                //方法二:entrySet遍歷key+value:
                Set<Map.Entry<String, Student>> entries = studentMap.entrySet();
                for (Map.Entry<String, Student> entry : entries) {
                    String key = entry.getKey();
                    Student value = entry.getValue();
                    System.out.println("studentmap 方式2 == key="+key+" value="+ value);
                }
        }
    }

Map在實際應用中非常廣泛,例如在數(shù)據(jù)庫中存儲和查詢數(shù)據(jù)、在緩存中存儲和獲取數(shù)據(jù)、在處理用戶輸入和輸出時進行轉(zhuǎn)換等。通過使用Map,我們可以更高效地處理復雜的數(shù)據(jù)結(jié)構(gòu)和業(yè)務邏輯。

總結(jié)

來說,Map是Java集合框架中的一個重要組成部分,它的強大功能和靈活應用為我們的編程工作帶來了極大的便利。希望通過今天的學習,你能對Map有一個更深入的理解,并能在實際編程中靈活運用,更多關于Java Map雙列集合的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解Java中常見語法糖的使用

    詳解Java中常見語法糖的使用

    語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家 Peter.J.Landin 發(fā)明的一個術語,指在計算機語言中添加的某種語法,本文主要為大家分享了12個java中常見的語法糖,感興趣的小伙伴可以了解下
    2023-11-11
  • 聊聊Controller中RequestMapping的作用

    聊聊Controller中RequestMapping的作用

    這篇文章主要介紹了Controller中RequestMapping的作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 基于SPRINGBOOT配置文件占位符過程解析

    基于SPRINGBOOT配置文件占位符過程解析

    這篇文章主要介紹了基于SPRINGBOOT配置文件占位符過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 一文詳解RabbitMQ如何保證消息可靠性

    一文詳解RabbitMQ如何保證消息可靠性

    這篇文章將詳細介紹RabbitMQ的消息可靠性機制,如消息丟失,消息重復性消費,消息積壓等問題,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • Ajax實現(xiàn)搜索引擎自動補全功能

    Ajax實現(xiàn)搜索引擎自動補全功能

    本文主要介紹了Ajax實現(xiàn)搜索引擎自動補全功能的實例解析。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • SpringBoot中雙token實現(xiàn)無感刷新

    SpringBoot中雙token實現(xiàn)無感刷新

    本文介紹雙Token無感刷新機制,前端React與后端SpringBoot實現(xiàn),采用HttpOnly Cookie和短期Token設計,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • Sharding JDBC讀寫分離實現(xiàn)原理及實例

    Sharding JDBC讀寫分離實現(xiàn)原理及實例

    這篇文章主要介紹了Sharding JDBC讀寫分離實現(xiàn)原理及實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • SpringAop切入點execution表達式的深入講解

    SpringAop切入點execution表達式的深入講解

    Spring AOP 可能會經(jīng)常使用 execution切入點指示符,下面這篇文章主要給大家介紹了關于SpringAop切入點execution表達式的相關資料,需要的朋友可以參考下
    2021-08-08
  • Mybatis?selectKey 如何返回新增用戶的id值

    Mybatis?selectKey 如何返回新增用戶的id值

    這篇文章主要介紹了Mybatis?selectKey 如何返回新增用戶的id值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot3.x版本與Mybatis-Plus不兼容問題

    SpringBoot3.x版本與Mybatis-Plus不兼容問題

    當使用3.x版本的SpringBoot結(jié)合Mybatis-Plus時版本不兼容就會報錯,本文就來介紹一下這個問題的解決方法,感興趣的可以了解一下
    2024-03-03

最新評論

台北县| 鄄城县| 兴宁市| 龙口市| 留坝县| 陵川县| 黎平县| 建水县| 桃园市| 乐昌市| 武山县| 新河县| 通州区| 休宁县| 泰来县| 崇明县| 屯留县| 浪卡子县| 卢湾区| 宁波市| 望奎县| 阜新市| 收藏| 唐海县| 杂多县| 开平市| 顺义区| 青岛市| 循化| 阿拉善右旗| 绥棱县| 仙桃市| 东海县| 伊吾县| 临桂县| 无极县| 万宁市| 淮安市| 邵武市| 宜兰市| 长子县|