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

Java 深入淺出掌握Map集合之雙列集合

 更新時(shí)間:2021年11月11日 11:52:35   作者:?jiǎn)贪途鷥? 
雙列集合是每個(gè)元素都有鍵與值兩部分組成的集合,記錄的是鍵值對(duì)對(duì)應(yīng)關(guān)系,即通過鍵可以找到值,鍵必須是唯一,值可以重復(fù),接下來跟著小編具體了解吧

前言

友友們,大家好哇!這一期我為大家?guī)黼p列集合(Map)的相關(guān)知識(shí)點(diǎn)講解,那么什么是雙列集合呢?Map集合就是采用了key-value鍵值對(duì)映射的方式進(jìn)行存儲(chǔ)。通俗的講,和查字典類似,查字典時(shí),我們通過偏旁或筆畫等查詢漢字,集合里通過key找到對(duì)應(yīng)的value,用學(xué)生類來說,key相當(dāng)于學(xué)號(hào),value對(duì)應(yīng)name。

Map集合

Map概述

Map是一種依照鍵(key)存儲(chǔ)元素的容器,鍵(key)很像下標(biāo),在List中下標(biāo)是整數(shù)。在Map中鍵(key)可以使任意類型的對(duì)象。Map中不能有重復(fù)的鍵(Key),每個(gè)鍵(key)都有一個(gè)對(duì)應(yīng)的值(value)。一個(gè)鍵(key)和它對(duì)應(yīng)的值構(gòu)成map集合中的一個(gè)元素。

Map特點(diǎn)

  • 鍵值對(duì)應(yīng)關(guān)系
  • 一個(gè)鍵對(duì)應(yīng)一個(gè)值
  • 鍵不能重復(fù),值可以重復(fù)
  • 元素存取無序

Map集合的功能

  • 基本功能

public class MapDemo_01 {
    public static void main(String[] args) {
        //創(chuàng)建集合對(duì)象
        Map<String,String> map = new HashMap<>();
 
        //V put(K key,V value):添加元素
        map.put("灰太狼","紅太狼");
        map.put("喜羊羊","美羊羊");
        map.put("扁嘴倫","暖羊羊");
 
        //V remove(Object key):根據(jù)鍵刪除鍵值對(duì)元素
//        System.out.println(map.remove("喜羊羊"));
        //沒有對(duì)應(yīng)的鍵,則返回null
//        System.out.println(map.remove("沸羊羊"));
 
        //void clear():移除所有的鍵值對(duì)元素
//        map.clear();
 
        //boolean containsKey(Object key):判斷集合是否包含指定的鍵
//        System.out.println(map.containsKey("喜羊羊"));
        //包含返回true,反之false
//        System.out.println(map.containsKey("沸羊羊"));
 
        //boolean isEmpty():判斷集合是否為空
//        System.out.println(map.isEmpty());
 
        //int size():集合的長(zhǎng)度,也就是集合中鍵值對(duì)的個(gè)數(shù)
        System.out.println(map.size());
 
        System.out.println(map);
    }
}
  • 獲取功能

public class MapDemo_02 {
    public static void main(String[] args) {
        //創(chuàng)建集合對(duì)象
        Map<String, String> map = new HashMap<>();
 
        //添加元素
        map.put("灰太狼", "紅太狼");
        map.put("喜羊羊", "美羊羊");
        map.put("扁嘴倫", "暖羊羊");
 
        //V get(Object key):根據(jù)鍵獲取值
//        System.out.println(map.get("灰太狼"));
 
        //Set<K> keySet():獲取所有鍵的集合
//        Set<String> keySet = map.keySet();
//        for(String key : keySet) {
//            System.out.println(key);
//        }
 
        //Collection<V> values():獲取所有值的集合
        Collection<String> values = map.values();
        for(String value : values) {
            System.out.println(value);
        }
    }
}

Map集合的遍歷

方式一:

  • 1)獲取所有鍵的集合。用keySet()方法實(shí)現(xiàn)
  • 2)遍歷鍵的集合,獲取到每一個(gè)鍵。用增強(qiáng)for實(shí)現(xiàn)
  • 3)根據(jù)鍵去找值。用get(Object key)方法實(shí)現(xiàn)
public class MapDemo_03 {
    public static void main(String[] args) {
        //創(chuàng)建集合對(duì)象
        Map<String, String> map = new HashMap<String, String>();
 
        //添加元素
        map.put("灰太狼", "紅太狼");
        map.put("喜羊羊", "美羊羊");
        map.put("扁嘴倫", "暖羊羊");
 
        //獲取所有鍵的集合。用keySet()方法實(shí)現(xiàn)
        Set<String> keySet = map.keySet();
        //遍歷鍵的集合,獲取到每一個(gè)鍵。用增強(qiáng)for實(shí)現(xiàn)
        for (String key : keySet) {
            //根據(jù)鍵去找值。用get(Object key)方法實(shí)現(xiàn)
            String value = map.get(key);
            System.out.println(key + "," + value);
        }
    }
}

方式二:

  • 1)獲取所有鍵值對(duì)對(duì)象的集合:Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對(duì)對(duì)象的集合
  • 2)遍歷鍵值對(duì)對(duì)象的集合,得到每一個(gè)鍵值對(duì)對(duì)象:用增強(qiáng)for實(shí)現(xiàn),得到每一個(gè)Map.Entry
  • 3)根據(jù)鍵值對(duì)對(duì)象獲取鍵和值:用getKey()得到鍵,用getValue()得到值
public class MapDemo02 {
    public static void main(String[] args) {
        //創(chuàng)建集合對(duì)象
        Map<String, String> map = new HashMap<String, String>();
 
        //添加元素
        map.put("灰太狼", "紅太狼");
        map.put("喜羊羊", "美羊羊");
        map.put("扁嘴倫", "暖羊羊");
 
        //獲取所有鍵值對(duì)對(duì)象的集合
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        //遍歷鍵值對(duì)對(duì)象的集合,得到每一個(gè)鍵值對(duì)對(duì)象
        for (Map.Entry<String, String> me : entrySet) {
            //根據(jù)鍵值對(duì)對(duì)象獲取鍵和值
            String key = me.getKey();
            String value = me.getValue();
            System.out.println(key + "," + value);
        }
    }
}

Map集合的各個(gè)子類

  • 1)Hashtable:

底層是哈希表數(shù)據(jù)結(jié)構(gòu),線程是同步的,不可以存入null鍵,null值。
效率較低,被HashMap 替代。

  • 2)HashMap:(數(shù)據(jù)無序、唯一)

底層是哈希表數(shù)據(jù)結(jié)構(gòu),線程是不同步的,可以存入null鍵,null值。
要保證鍵的唯一性,需要覆蓋hashCode方法,和equals方法。

  • 3)LinkedHashMap:(數(shù)據(jù)有序、唯一)

該子類基于哈希表又融入了鏈表。可以Map集合進(jìn)行增刪提高效率。

  • 4)TreeMap:(數(shù)據(jù)有序、唯一)

底層是二叉樹數(shù)據(jù)結(jié)構(gòu)??梢詫?duì)map集合中的鍵進(jìn)行排序。需要使用Comparable或者Comparator 進(jìn)行比較排序。return 0,來判斷鍵的唯一性。

集合框架圖

今天驗(yàn)收關(guān)卡的時(shí)候,老師針對(duì)集合這部分內(nèi)容,給出了一些補(bǔ)充知識(shí)與相關(guān)問題,我簡(jiǎn)短總結(jié)了一下。

【1】ArrayList、LinkedList、Vector三者區(qū)別:

Vector:數(shù)組,線程安全

ArrayList:List子類,數(shù)據(jù)存取有序,可重復(fù);底層是數(shù)組結(jié)構(gòu)實(shí)現(xiàn),有索引,查詢快、增刪慢;線程不安全

LinkedList:List子類,數(shù)據(jù)存取有序,可重復(fù);底層是鏈表結(jié)構(gòu)實(shí)現(xiàn),指針,查詢慢、增刪快;線程不安全

【2】HashMap與HashTable區(qū)別:

1)底層數(shù)據(jù)結(jié)構(gòu)不同:HashTable只有數(shù)組+鏈表(JDK1就提出);HashMap在JDK1.8之前 數(shù)組+鏈表,在1.8之后 數(shù)組+鏈表/紅黑樹

2)初始化容量不同:HashMap 的初始容量為:16,Hashtable 初始容量為:11,兩者的負(fù)載因子默認(rèn)都是:0.75

3)擴(kuò)容機(jī)制不同:當(dāng)已用容量>總?cè)萘?* 負(fù)載因子時(shí),HashMap 擴(kuò)容規(guī)則為當(dāng)前容量翻倍,Hashtable 擴(kuò)容規(guī)則為當(dāng)前容量翻倍 +1

4)Hashtable是不允許鍵或值為 null 的,HashMap 的鍵值則都可以為 null

【3】HashSet與TreeSet區(qū)別:

HashSet:

1)不能保證元素的排列順序,順序有可能發(fā)生變化

2)集合元素可以是null,但只能放入一個(gè)null

3)HashSet底層是采用HashMap實(shí)現(xiàn)的

4)HashSet底層是哈希表實(shí)現(xiàn)的

TreeSet:

1)Treeset中的數(shù)據(jù)是排好序的,不允許放入null值

2)TreeSet是通過TreeMap實(shí)現(xiàn)的,只不過Set用的只是Map的key

3)TreeSet的底層實(shí)現(xiàn)是采用二叉樹(紅-黑樹)的數(shù)據(jù)結(jié)構(gòu)

【4】Collection和Collections的區(qū)別:

Collection:

一個(gè)集合接口,它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法。實(shí)現(xiàn)接口的類主要有List和Set,該接口的設(shè)計(jì)目標(biāo)是為了各種具體的集合提供最大化的統(tǒng)一的操作方式

Collections:

針對(duì)集合類的一個(gè)包裹類,它提供了一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序以及線程安全化等操作,其中的大多數(shù)方法都是用于處理線性表。Collections類不能實(shí)例化,如同一個(gè)工具類,服務(wù)于Collection框架。如果在使用Collections類的方法時(shí),對(duì)應(yīng)的Collection對(duì)象null,則這些方法都會(huì)拋出NullPointerException

總結(jié)

本篇內(nèi)容給出的集合的各個(gè)子類之間的區(qū)別不怎么完善,想要拓展更多知識(shí)的同學(xué),可以自行查詢搜索一下,以便更深的認(rèn)識(shí)集合。今天的分享就到這里了,忘友友們可以點(diǎn)贊加評(píng)論哦,誠(chéng)信回訪!??!

以上就是Java 深入淺出掌握Map集合之雙列集合的詳細(xì)內(nèi)容,更多關(guān)于Java 集合的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的異步回調(diào)問題

    Java中的異步回調(diào)問題

    這篇文章主要介紹了Java中的異步回調(diào)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 基于java實(shí)現(xiàn)websocket代碼示例

    基于java實(shí)現(xiàn)websocket代碼示例

    這篇文章主要介紹了基于java實(shí)現(xiàn)websocket代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java中Array、List、ArrayList的區(qū)別及說明

    Java中Array、List、ArrayList的區(qū)別及說明

    這篇文章主要介紹了Java中Array、List、ArrayList的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 一篇文章帶你了解java Object根類中關(guān)于toString,equals的方法

    一篇文章帶你了解java Object根類中關(guān)于toString,equals的方法

    這篇文章主要介紹了Object類toString()和equals()方法使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • IDEA 2020版本最新破解教程可激活至2089年(推薦)

    IDEA 2020版本最新破解教程可激活至2089年(推薦)

    這篇文章主要介紹了IDEA 2020版本最新破解教程可激活至2089年,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java多線程之間日志traceId傳遞方式

    Java多線程之間日志traceId傳遞方式

    這篇文章主要介紹了Java多線程之間日志traceId傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • FeignMultipartSupportConfig上傳圖片配置方式

    FeignMultipartSupportConfig上傳圖片配置方式

    這篇文章主要介紹了FeignMultipartSupportConfig上傳圖片配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何使用MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作

    如何使用MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作

    MyBatis-Plus是一個(gè)MyBatis 的增強(qiáng)工具,在MyBatis,的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生。 這篇文章主要介紹了MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作,需要的朋友可以參考下
    2021-09-09
  • Spring Boot使用Redisson實(shí)現(xiàn)滑動(dòng)窗口限流的項(xiàng)目實(shí)踐

    Spring Boot使用Redisson實(shí)現(xiàn)滑動(dòng)窗口限流的項(xiàng)目實(shí)踐

    滑動(dòng)窗口限流是一種流量控制策略,用于控制在一定時(shí)間內(nèi)的請(qǐng)求頻率,本文主要介紹了Spring Boot使用Redisson實(shí)現(xiàn)滑動(dòng)窗口限流的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • SpringMVC接收與響應(yīng)json數(shù)據(jù)的幾種方式

    SpringMVC接收與響應(yīng)json數(shù)據(jù)的幾種方式

    這篇文章主要給大家介紹了關(guān)于SpringMVC接收與響應(yīng)json數(shù)據(jù)的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用springmvc具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

额尔古纳市| 湛江市| 万荣县| 仁怀市| 垣曲县| 休宁县| 三原县| 静宁县| 公安县| 绥阳县| 三台县| 英超| 依兰县| 广宁县| 安新县| 科尔| 讷河市| 浮山县| 巩留县| 新巴尔虎左旗| 铜鼓县| 涪陵区| 南溪县| 青海省| 静乐县| 大新县| 海门市| 武威市| 洛隆县| 牡丹江市| 金山区| 楚雄市| 闵行区| 赫章县| 吕梁市| 临湘市| 巢湖市| 石阡县| 隆化县| 惠州市| 中西区|