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

Java那點(diǎn)兒事之Map集合不為人知的秘密有哪些

 更新時(shí)間:2021年10月21日 14:21:39   作者:空山新雨后~  
Map用于保存具有映射關(guān)系的數(shù)據(jù),Map集合里保存著兩組值,一組用于保存Map的key,另一組保存著Map的value,和查字典類似,通過key找到對應(yīng)的value,通過頁數(shù)找到對應(yīng)的信息。用學(xué)生類來說,key相當(dāng)于學(xué)號,value對應(yīng)name,age,sex等信息。用這種對應(yīng)關(guān)系方便查找

前言

上期我們說到了Collection集合,他是單列的集合,分為List集合和Set集合,今天我將繼續(xù)分析一個(gè)雙列集合也就是Map,為什么叫他雙列集合呢? 往下看,你就知道了。

一、Map

Map集合的特點(diǎn)
- 鍵值對映射關(guān)系
- 一個(gè)鍵對應(yīng)一個(gè)值
- 鍵不能重復(fù),值可以重復(fù)
- 元素存取無序

我們通過他的一個(gè)實(shí)現(xiàn)類HashMap集合來理解

二、HashMap的基本概念

HashMap的定義:

HashMap 是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(key-value)映射。

HashMap 實(shí)現(xiàn)了 Map 接口,根據(jù)鍵的 HashCode 值存儲(chǔ)數(shù)據(jù),具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。

HashMap 是無序的,即不會(huì)記錄插入的順序。

HashMap 繼承于AbstractMap,實(shí)現(xiàn)了 Map、Cloneable、java.io.Serializable 接口。

那么HashMap的鍵和值的類型可以是String類型,也可以是其他數(shù)據(jù)的包裝類類型,那么說到包裝類類型,這里順便幫大家復(fù)習(xí)一下包裝類類型哦:

三、HashMap集合的基本方法與使用

學(xué)完HashMap集合的基本概念,那么我們怎么去在實(shí)際開發(fā)過程中去使用他呢?這里我們就要用到他的特有方法了,

以下是HashMap集合的常用方法

需要注意的是,Map集合的元素的添加并不是Collection集合的add()方法,而是Put()方法。因?yàn)镸ap集合是鍵值對集合,那么我們?nèi)绾潍@取集合中的每一個(gè)元素呢?這里集合也給我們提供了他的元素獲取方法:

示例代碼如下:

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
/*
    Map集合的獲取功能:
        V get(Object key):根據(jù)鍵獲取值
        Set<K> keySet():獲取所有鍵的集合
        Collection<V> values():獲取所有值的集合
 */
public class MapDemo03 {
    public static void main(String[] args) {
        Map<String, String> m = new HashMap<String, String>();
 
        m.put("張三", "李四");
        m.put("王五", "趙六");
        m.put("李老板", "光頭強(qiáng)");
        // V get(Object key):根據(jù)鍵獲取值
        System.out.println(m.get("張三"));
 
        System.out.println(m.get("張四"));
        System.out.println("=============");
 
        //        Set<K> keySet():獲取所有鍵的集合
        Set<String> s = m.keySet();
        for (String i : s) {
            System.out.println(i);
        }
        System.out.println("=============");
 
        //        Collection<V> values():獲取所有值的集合
        Collection<String> c = m.values();
        for (String x : c) {
            System.out.println(x);
        }
    }
}

輸出結(jié)果:

李四
null
=============
張三
王五
李老板
=============
李四
趙六
光頭強(qiáng)

四、HashMap集合的遍歷

其實(shí)遍歷無非就是把集合中的元素一個(gè)一個(gè)給取出來,我們能用,那么在第三部分其實(shí)就已經(jīng)講到了一種遍歷方式,那就是我們?nèi)カ@取鍵的集合,然后用循環(huán)去獲取每一個(gè)鍵所對應(yīng)的值,這樣我們就將集合中的每一個(gè)元素取出來了。

遍歷方式一:根據(jù)鍵的集合找值

步驟分析
- 獲取所有鍵的集合。用keySet()方法實(shí)現(xiàn)
- 遍歷鍵的集合,獲取到每一個(gè)鍵。用增強(qiáng)for實(shí)現(xiàn)
- 根據(jù)鍵去找值。用get(Object key)方法實(shí)現(xiàn)

代碼實(shí)現(xiàn)

import java.util.Map;
import java.util.HashMap;
import java.util.Set;
 
/*
    Map集合的遍歷(方式1):
        1:獲取所有鍵的集合。用keySet()方法實(shí)現(xiàn)
        2:遍歷鍵的集合,獲取到每一個(gè)鍵。用增強(qiáng)for實(shí)現(xiàn)
        3:根據(jù)鍵去找值。用get(Object key)方法實(shí)現(xiàn)
 */
public class MapDemo01 {
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        Map<String, String> map = new HashMap<String, String>();
 
        //添加元素
        map.put("張無忌", "趙敏");
        map.put("郭靖", "黃蓉");
        map.put("楊過", "小龍女");
        //1:獲取所有鍵的集合。用keySet()方法實(shí)現(xiàn)
        Set<String> keySet = map.keySet();
 
        for (String key : keySet) {
            String value = map.get(key);
            System.out.println(key + "," + value);
        }
 
    }
}

輸出結(jié)果:

楊過,小龍女
郭靖,黃蓉
張無忌,趙敏

那么第二種方法就是我們利用entrySet()方法來獲取集合中所有的鍵值對集合,然后去獲取所對的鍵或值。

HashMap集合遍歷方式二:鍵值對集合找鍵值對

步驟分析
- 獲取所有鍵值對對象的集合
- Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合
- 遍歷鍵值對對象的集合,得到每一個(gè)鍵值對對象
- 用增強(qiáng)for實(shí)現(xiàn),得到每一個(gè)Map.Entry
- 根據(jù)鍵值對對象獲取鍵和值
- 用getKey()得到鍵
- 用getValue()得到值

代碼實(shí)現(xiàn)

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
/*
    Map集合的遍歷(方式2):
        1:獲取所有鍵值對對象的集合
            Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合
        2:遍歷鍵值對對象的集合,得到每一個(gè)鍵值對對象
            用增強(qiáng)for實(shí)現(xiàn),得到每一個(gè)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("楊過", "小龍女");
 
        //1:獲取所有鍵值對對象的集合
        Set<Map.Entry<String, String>> me = map.entrySet();
 
//        遍歷鍵值對對象的集合,得到每一個(gè)鍵值對對象
        for (Map.Entry<String, String> e : me) {
            String key = e.getKey();
            String value = e.getValue();
            System.out.println(key + "," + value);
        }
 
    }
}

輸出結(jié)果:

楊過,小龍女
郭靖,黃蓉
張無忌,趙敏

兩種遍歷方式都是很實(shí)用,各位大佬在開發(fā)中愿意用哪種都是可以的哦。

五、HashMap集合的綜合案例

有道是:與其臨淵羨魚,不如退而結(jié)網(wǎng)??戳四敲?多理論的東西不自己動(dòng)手去實(shí)踐一下,那么魚兒永遠(yuǎn)在魚塘,知識永遠(yuǎn)在電腦里,接下來就讓我們一起動(dòng)手做一道題,來加深一下印象。

案例需求:

案例需求
- 鍵盤錄入一個(gè)字符串,要求統(tǒng)計(jì)字符串中每個(gè)字符串出現(xiàn)的次數(shù)。
- 舉例:鍵盤錄入“aababcabcdabcde” 在控制臺輸出:“a(5)b(4)c(3)d(2)e(1)”

思路解析:

1:鍵盤錄入一個(gè)字符串
2:創(chuàng)建HashMap集合,鍵是Character,值是Integer
3:遍歷字符串,得到每一個(gè)字符
4:拿得到的每一個(gè)字符作為鍵到HashMap集合中去找對應(yīng)的值,看其返回值
如果返回值是null:說明該字符在HashMap集合中不存在,就把該字符作為鍵,1作為值存儲(chǔ)
如果返回值不是null:說明該字符在HashMap集合中存在,把該值加1,然后重新存儲(chǔ)該字符和對應(yīng)的值
5:遍歷HashMap集合,得到鍵和值,按照要求進(jìn)行拼接
6:輸出結(jié)果

代碼實(shí)例:

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
 
/*
    需求:
        鍵盤錄入一個(gè)字符串,要求統(tǒng)計(jì)字符串中每個(gè)字符串出現(xiàn)的次數(shù)。
        舉例:鍵盤錄入“aababcabcdabcde”	在控制臺輸出:“a(5)b(4)c(3)d(2)e(1)”
    思路:
        1:鍵盤錄入一個(gè)字符串
        2:創(chuàng)建HashMap集合,鍵是Character,值是Integer
        3:遍歷字符串,得到每一個(gè)字符
        4:拿得到的每一個(gè)字符作為鍵到HashMap集合中去找對應(yīng)的值,看其返回值
            如果返回值是null:說明該字符在HashMap集合中不存在,就把該字符作為鍵,1作為值存儲(chǔ)
            如果返回值不是null:說明該字符在HashMap集合中存在,把該值加1,然后重新存儲(chǔ)該字符和對應(yīng)的值
        5:遍歷HashMap集合,得到鍵和值,按照要求進(jìn)行拼接
        6:輸出結(jié)果
 */
public class HashMapDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入一個(gè)字符串:");
        String s = sc.nextLine();
 
        HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
 
        for (int i = 0; i < s.length(); i++) {
            char key = s.charAt(i);
 
            Integer value = hm.get(key);
            if (value == null) {
                hm.put(key, 1);
 
            } else {
                value++;
                hm.put(key, value);
            }
        }
 
        StringBuilder sb = new StringBuilder();
 
        Set<Character> keySet = hm.keySet();
        for (Character key1 : keySet) {
            Integer values = hm.get(key1);
            sb.append(key1).append("(").append(values).append(")");
        }
        String result = sb.toString();
        System.out.println(result);
    }
}

輸出結(jié)果:

請輸入一個(gè)字符串:
aababcabcdabcde
a(5)b(4)c(3)d(2)e(1)

六、總結(jié)

學(xué)習(xí)集合就應(yīng)該仔細(xì)去了解其特有方法,并注意區(qū)分,多實(shí)踐才能加深明白其中用法,并且應(yīng)該結(jié)合以前學(xué)習(xí)的知識去理解,可能會(huì)有意向不到的收獲哦。本期分享到這里結(jié)束了,結(jié)合上期食用更佳哦,下期再見!

到此這篇關(guān)于Java那點(diǎn)兒事之Map集合不為人知的秘密有哪些的文章就介紹到這了,更多相關(guān)Java Map集合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 高并發(fā)一:前言

    Java 高并發(fā)一:前言

    本系列基于煉數(shù)成金課程,為了更好的學(xué)習(xí),做了系列的記錄。 本文主要介紹 1.高并發(fā)的概念,為以后系列知識做鋪墊。 2.兩個(gè)重要的定理
    2016-09-09
  • Spring boot創(chuàng)建自定義starter的完整步驟

    Spring boot創(chuàng)建自定義starter的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring boot創(chuàng)建自定義starter的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java多線程中的Executor詳解

    Java多線程中的Executor詳解

    這篇文章主要介紹了Java多線程中的Executor詳解,該接口提供了一種將任務(wù)提交與如何運(yùn)行每個(gè)任務(wù)的機(jī)制(包括線程使用、調(diào)度等細(xì)節(jié))解耦的方法,它通常使用預(yù)先創(chuàng)建線程而不是創(chuàng)建線程,需要的朋友可以參考下
    2023-12-12
  • WebService教程詳解(一)

    WebService教程詳解(一)

    WebService,顧名思義就是基于Web的服務(wù)。它使用Web(HTTP)方式,接收和響應(yīng)外部系統(tǒng)的某種請求,接下來通過本文給大家介紹WebService教程詳解(一),對webservice教程感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • IDEA 2019.1.3 激活碼大全

    IDEA 2019.1.3 激活碼大全

    本文是小編給大家收藏整理的IDEA 2019.1.3 激活碼大全,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-10-10
  • Maven?Web項(xiàng)目使用Cargo插件實(shí)現(xiàn)自動(dòng)化部署的詳細(xì)步驟

    Maven?Web項(xiàng)目使用Cargo插件實(shí)現(xiàn)自動(dòng)化部署的詳細(xì)步驟

    cargo ,它是一組幫助用戶實(shí)現(xiàn)自動(dòng)化部署,操作Web容器的工具,并且?guī)缀踔С炙械腤eb容器,這篇文章主要介紹了Maven?Web項(xiàng)目使用Cargo實(shí)現(xiàn)自動(dòng)化部署,需要的朋友可以參考下
    2023-02-02
  • 一文帶你吃透Java中的String類

    一文帶你吃透Java中的String類

    在 Java 中,字符串是一種常見的數(shù)據(jù)類型,經(jīng)常用于存儲(chǔ)一些文本信息,而String類則是Java提供的專門用于字符串操作的類,本文就來和大家聊聊String類的常用方法與實(shí)現(xiàn)原理吧
    2023-05-05
  • 淺談springboot的三種啟動(dòng)方式

    淺談springboot的三種啟動(dòng)方式

    這篇文章主要介紹了淺談springboot的三種啟動(dòng)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 深入dom4j使用selectSingleNode方法報(bào)錯(cuò)分析

    深入dom4j使用selectSingleNode方法報(bào)錯(cuò)分析

    本篇文章是對dom4j使用selectSingleNode方法報(bào)錯(cuò)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android中Handler引起的內(nèi)存泄露問題解決辦法

    Android中Handler引起的內(nèi)存泄露問題解決辦法

    這篇文章主要介紹了Android中Handler引起的內(nèi)存泄露問題解決辦法,本文講解了導(dǎo)致內(nèi)存泄露的情景,并給出了修改后的代碼,需要的朋友可以參考下
    2015-01-01

最新評論

乌兰县| 保靖县| 云霄县| 宜丰县| 吴川市| 禄劝| 花垣县| 平乐县| 中超| 安康市| 合水县| 枣强县| 南皮县| 蒙自县| 都江堰市| 涿鹿县| 天气| 冷水江市| 安达市| 乳源| 正镶白旗| 阜新| 云林县| 山东省| 青海省| 阆中市| 洞头县| 晋州市| 内乡县| 册亨县| 宜兰市| 波密县| 涞水县| 余庆县| 罗平县| 保定市| 卢湾区| 安溪县| 沐川县| 三穗县| 威信县|