溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中Map集合的雙列集合怎么用

發(fā)布時間:2021-11-11 13:31:50 來源:億速云 閱讀:154 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Java中Map集合的雙列集合怎么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    Map集合

    Map概述

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

    Java中Map集合的雙列集合怎么用

    Map特點(diǎn)

    • 鍵值對應(yīng)關(guān)系

    • 一個鍵對應(yīng)一個值

    • 鍵不能重復(fù),值可以重復(fù)

    • 元素存取無序

    Map集合的功能

    • 基本功能

    Java中Map集合的雙列集合怎么用

    public class MapDemo_01 {
        public static void main(String[] args) {
            //創(chuàng)建集合對象
            Map<String,String> map = new HashMap<>();
     
            //V put(K key,V value):添加元素
            map.put("灰太狼","紅太狼");
            map.put("喜羊羊","美羊羊");
            map.put("扁嘴倫","暖羊羊");
     
            //V remove(Object key):根據(jù)鍵刪除鍵值對元素
    //        System.out.println(map.remove("喜羊羊"));
            //沒有對應(yīng)的鍵,則返回null
    //        System.out.println(map.remove("沸羊羊"));
     
            //void clear():移除所有的鍵值對元素
    //        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():集合的長度,也就是集合中鍵值對的個數(shù)
            System.out.println(map.size());
     
            System.out.println(map);
        }
    }
    • 獲取功能

    Java中Map集合的雙列集合怎么用

    public class MapDemo_02 {
        public static void main(String[] args) {
            //創(chuàng)建集合對象
            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)遍歷鍵的集合,獲取到每一個鍵。用增強(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)建集合對象
            Map<String, String> map = new HashMap<String, String>();
     
            //添加元素
            map.put("灰太狼", "紅太狼");
            map.put("喜羊羊", "美羊羊");
            map.put("扁嘴倫", "暖羊羊");
     
            //獲取所有鍵的集合。用keySet()方法實(shí)現(xiàn)
            Set<String> keySet = map.keySet();
            //遍歷鍵的集合,獲取到每一個鍵。用增強(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)獲取所有鍵值對對象的集合:Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合

    • 2)遍歷鍵值對對象的集合,得到每一個鍵值對對象:用增強(qiáng)for實(shí)現(xiàn),得到每一個Map.Entry

    • 3)根據(jù)鍵值對對象獲取鍵和值:用getKey()得到鍵,用getValue()得到值

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

    Map集合的各個子類

    • 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ù)有序、唯一)

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

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

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

    集合框架圖

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

    Java中Map集合的雙列集合怎么用

    【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ù)載因子時,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,但只能放入一個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:

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

    Collections:

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

    感謝各位的閱讀!關(guān)于“Java中Map集合的雙列集合怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI