欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年11月11日 11:52:35   作者:喬巴菌兒  
雙列集合是每個元素都有鍵與值兩部分組成的集合,記錄的是鍵值對對應關系,即通過鍵可以找到值,鍵必須是唯一,值可以重復,接下來跟著小編具體了解吧

前言

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

Map集合

Map概述

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

Map特點

  • 鍵值對應關系
  • 一個鍵對應一個值
  • 鍵不能重復,值可以重復
  • 元素存取無序

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):根據鍵刪除鍵值對元素
//        System.out.println(map.remove("喜羊羊"));
        //沒有對應的鍵,則返回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():集合的長度,也就是集合中鍵值對的個數
        System.out.println(map.size());
 
        System.out.println(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):根據鍵獲取值
//        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()方法實現
  • 2)遍歷鍵的集合,獲取到每一個鍵。用增強for實現
  • 3)根據鍵去找值。用get(Object key)方法實現
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()方法實現
        Set<String> keySet = map.keySet();
        //遍歷鍵的集合,獲取到每一個鍵。用增強for實現
        for (String key : keySet) {
            //根據鍵去找值。用get(Object key)方法實現
            String value = map.get(key);
            System.out.println(key + "," + value);
        }
    }
}

方式二:

  • 1)獲取所有鍵值對對象的集合:Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合
  • 2)遍歷鍵值對對象的集合,得到每一個鍵值對對象:用增強for實現,得到每一個Map.Entry
  • 3)根據鍵值對對象獲取鍵和值:用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) {
            //根據鍵值對對象獲取鍵和值
            String key = me.getKey();
            String value = me.getValue();
            System.out.println(key + "," + value);
        }
    }
}

Map集合的各個子類

  • 1)Hashtable:

底層是哈希表數據結構,線程是同步的,不可以存入null鍵,null值。
效率較低,被HashMap 替代。

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

底層是哈希表數據結構,線程是不同步的,可以存入null鍵,null值。
要保證鍵的唯一性,需要覆蓋hashCode方法,和equals方法。

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

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

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

底層是二叉樹數據結構??梢詫ap集合中的鍵進行排序。需要使用Comparable或者Comparator 進行比較排序。return 0,來判斷鍵的唯一性。

集合框架圖

今天驗收關卡的時候,老師針對集合這部分內容,給出了一些補充知識與相關問題,我簡短總結了一下。

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

Vector:數組,線程安全

ArrayList:List子類,數據存取有序,可重復;底層是數組結構實現,有索引,查詢快、增刪慢;線程不安全

LinkedList:List子類,數據存取有序,可重復;底層是鏈表結構實現,指針,查詢慢、增刪快;線程不安全

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

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

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

3)擴容機制不同:當已用容量>總容量 * 負載因子時,HashMap 擴容規(guī)則為當前容量翻倍,Hashtable 擴容規(guī)則為當前容量翻倍 +1

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

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

HashSet:

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

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

3)HashSet底層是采用HashMap實現的

4)HashSet底層是哈希表實現的

TreeSet:

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

2)TreeSet是通過TreeMap實現的,只不過Set用的只是Map的key

3)TreeSet的底層實現是采用二叉樹(紅-黑樹)的數據結構

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

Collection:

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

Collections:

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

總結

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

以上就是Java 深入淺出掌握Map集合之雙列集合的詳細內容,更多關于Java 集合的資料請關注腳本之家其它相關文章!

相關文章

  • Java高并發(fā)測試框架JCStress詳解

    Java高并發(fā)測試框架JCStress詳解

    這篇文章主要介紹了Java高并發(fā)測試框架JCStress,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Lombok 的@StandardException注解解析

    Lombok 的@StandardException注解解析

    @StandardException 是一個實驗性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我們將使用 Lombok 的 @StandardException 注解自動生成異常類型類的構造函數,需要的朋友可以參考下
    2023-05-05
  • Java中類與對象的相關知識點總結

    Java中類與對象的相關知識點總結

    對象是類實例化出來的,對象中含有類的屬性,類是對象的抽象,下面這篇文章主要給大家介紹了關于Java中類與對象的一些相關知識點,需要的朋友可以參考下
    2021-11-11
  • Java接口的作用_動力節(jié)點Java學院整理

    Java接口的作用_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java接口的作用,涉及到接口的規(guī)范相關知識,需要的的朋友參考下
    2017-04-04
  • 原生Java操作兔子隊列RabbitMQ

    原生Java操作兔子隊列RabbitMQ

    這篇文章主要介紹了原生Java操作兔子隊列RabbitMQ,MQ全稱為Message?Queue,即消息隊列,“消息隊列”是在消息的傳輸過程中保存消息的容器,需要的朋友可以參考下
    2023-05-05
  • java多線程編程之線程的生命周期

    java多線程編程之線程的生命周期

    線程要經歷開始(等待)、運行、掛起和停止四種不同的狀態(tài)。這四種狀態(tài)都可以通過Thread類中的方法進行控制。下面給出了Thread類中和這四種狀態(tài)相關的方法
    2014-01-01
  • Java數據結構與算法之選擇排序(動力節(jié)點java學院整理)

    Java數據結構與算法之選擇排序(動力節(jié)點java學院整理)

    這篇文章主要介紹了Java數據結構與算法之選擇排序的相關資料,本文通過代碼講解,非常不錯,具有參考借鑒價值,需要的的朋友參考下
    2017-04-04
  • SpringBoot中間件ORM框架實現案例詳解(Mybatis)

    SpringBoot中間件ORM框架實現案例詳解(Mybatis)

    這篇文章主要介紹了SpringBoot中間件ORM框架實現案例詳解(Mybatis),本篇文章提煉出mybatis最經典、最精簡、最核心的代碼設計,來實現一個mini-mybatis,從而熟悉并掌握ORM框架的涉及實現,需要的朋友可以參考下
    2023-07-07
  • 深度剖析Java中的內存原型及工作原理

    深度剖析Java中的內存原型及工作原理

    這篇文章主要介紹了深度剖析Java中的內存原型及工作原理,本文講解了java虛擬機內存原型、常量池、Java內存分配中的棧、Java內存分配中的堆等內容,需要的朋友可以參考下
    2015-01-01
  • 使用SpringCache操作Redis緩存數據的示例代碼

    使用SpringCache操作Redis緩存數據的示例代碼

    SpringCache是一個框架,實現了基于注解的緩存功能,只需要簡單的加一個注解,就能實現緩存功能,本文給大家介紹了如何使用SpringCache操作Redis緩存數據,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01

最新評論