Java那点儿事之Map集合不为人知的秘密有哪些

目录
  • 前言
  • 一、Map
  • 二、HashMap的基本概念
  • 三、HashMap集合的基本方法与使用
  • 四、HashMap集合的遍历
  • 五、HashMap集合的综合案例
  • 六、总结

前言

上期我们说到了Collection集合,他是单列的集合,分为List集合和Set集合,今天我将继续分析一个双列集合也就是Map,为什么叫他双列集合呢? 往下看,你就知道了。

一、Map

Map集合的特点
- 键值对映射关系
- 一个键对应一个值
- 键不能重复,值可以重复
- 元素存取无序

我们通过他的一个实现类HashMap集合来理解

二、HashMap的基本概念

HashMap的定义:

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。

HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

HashMap 是无序的,即不会记录插入的顺序。

HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

那么HashMap的键和值的类型可以是String类型,也可以是其他数据的包装类类型,那么说到包装类类型,这里顺便帮大家复习一下包装类类型哦:

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

学完HashMap集合的基本概念,那么我们怎么去在实际开发过程中去使用他呢?这里我们就要用到他的特有方法了,

以下是HashMap集合的常用方法

需要注意的是,Map集合的元素的添加并不是Collection集合的add()方法,而是Put()方法。因为Map集合是键值对集合,那么我们如何获取集合中的每一个元素呢?这里集合也给我们提供了他的元素获取方法:

示例代码如下:

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
    Map集合的获取功能:
        V get(Object key):根据键获取值
        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("李老板", "光头强");
        // V get(Object key):根据键获取值
        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);
        }
    }
}

输出结果:

李四
null
=============
张三
王五
李老板
=============
李四
赵六
光头强

四、HashMap集合的遍历

其实遍历无非就是把集合中的元素一个一个给取出来,我们能用,那么在第三部分其实就已经讲到了一种遍历方式,那就是我们去获取键的集合,然后用循环去获取每一个键所对应的值,这样我们就将集合中的每一个元素取出来了。

遍历方式一:根据键的集合找值

步骤分析
- 获取所有键的集合。用keySet()方法实现
- 遍历键的集合,获取到每一个键。用增强for实现
- 根据键去找值。用get(Object key)方法实现

代码实现

import java.util.Map;
import java.util.HashMap;
import java.util.Set;

/*
    Map集合的遍历(方式1):
        1:获取所有键的集合。用keySet()方法实现
        2:遍历键的集合,获取到每一个键。用增强for实现
        3:根据键去找值。用get(Object key)方法实现
 */
public class MapDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        Map<String, String> map = new HashMap<String, String>();

        //添加元素
        map.put("张无忌", "赵敏");
        map.put("郭靖", "黄蓉");
        map.put("杨过", "小龙女");
        //1:获取所有键的集合。用keySet()方法实现
        Set<String> keySet = map.keySet();

        for (String key : keySet) {
            String value = map.get(key);
            System.out.println(key + "," + value);
        }

    }
}

输出结果:

杨过,小龙女
郭靖,黄蓉
张无忌,赵敏

那么第二种方法就是我们利用entrySet()方法来获取集合中所有的键值对集合,然后去获取所对的键或值。

HashMap集合遍历方式二:键值对集合找键值对

步骤分析
- 获取所有键值对对象的集合
- Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
- 遍历键值对对象的集合,得到每一个键值对对象
- 用增强for实现,得到每一个Map.Entry
- 根据键值对对象获取键和值
- 用getKey()得到键
- 用getValue()得到值

代码实现

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
    Map集合的遍历(方式2):
        1:获取所有键值对对象的集合
            Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
        2:遍历键值对对象的集合,得到每一个键值对对象
            用增强for实现,得到每一个Map.Entry
        3:根据键值对对象获取键和值
            用getKey()得到键
            用getValue()得到值
 */
public class MapDemo02 {
    public static void main(String[] args) {
        //创建集合对象
        Map<String, String> map = new HashMap<String, String>();

        //添加元素
        map.put("张无忌", "赵敏");
        map.put("郭靖", "黄蓉");
        map.put("杨过", "小龙女");

        //1:获取所有键值对对象的集合
        Set<Map.Entry<String, String>> me = map.entrySet();

//        遍历键值对对象的集合,得到每一个键值对对象
        for (Map.Entry<String, String> e : me) {
            String key = e.getKey();
            String value = e.getValue();
            System.out.println(key + "," + value);
        }

    }
}

输出结果:

杨过,小龙女
郭靖,黄蓉
张无忌,赵敏

两种遍历方式都是很实用,各位大佬在开发中愿意用哪种都是可以的哦。

五、HashMap集合的综合案例

有道是:与其临渊羡鱼,不如退而结网。看了那么 多理论的东西不自己动手去实践一下,那么鱼儿永远在鱼塘,知识永远在电脑里,接下来就让我们一起动手做一道题,来加深一下印象。

案例需求:

案例需求
- 键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
- 举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)c(3)d(2)e(1)”

思路解析:

1:键盘录入一个字符串
2:创建HashMap集合,键是Character,值是Integer
3:遍历字符串,得到每一个字符
4:拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值
如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储
如果返回值不是null:说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值
5:遍历HashMap集合,得到键和值,按照要求进行拼接
6:输出结果

代码实例:

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

/*
    需求:
        键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
        举例:键盘录入“aababcabcdabcde”	在控制台输出:“a(5)b(4)c(3)d(2)e(1)”
    思路:
        1:键盘录入一个字符串
        2:创建HashMap集合,键是Character,值是Integer
        3:遍历字符串,得到每一个字符
        4:拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值
            如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储
            如果返回值不是null:说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值
        5:遍历HashMap集合,得到键和值,按照要求进行拼接
        6:输出结果
 */
public class HashMapDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        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);
    }
}

输出结果:

请输入一个字符串:
aababcabcdabcde
a(5)b(4)c(3)d(2)e(1)

六、总结

学习集合就应该仔细去了解其特有方法,并注意区分,多实践才能加深明白其中用法,并且应该结合以前学习的知识去理解,可能会有意向不到的收获哦。本期分享到这里结束了,结合上期食用更佳哦,下期再见!

到此这篇关于Java那点儿事之Map集合不为人知的秘密有哪些的文章就介绍到这了,更多相关Java Map集合内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java之map的常见用法讲解与五种循环遍历实例代码理解

    目录 一.概述: 二.Map集合的功能介绍 三.map官方总结 四.实例 五.循环遍历的五种方法 一.概述: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 二.Map集合的功能介绍 a:添加功能 V put(K key,V val

  • Java集合之Map接口的实现类精解

    目录 HashMap类 1.HashMap类概述 2.HashMap的存储结构(底层实现原理) 3.HashMap源码中的重要常量 LinkedHashMap类 TreeMap类 1.TreeMap类概述 2.自然排序 3.定制排序 Hashtable类 Properties类 HashMap类 1.HashMap类概述 HashMap是 Map 接口使用频率最高的实现类,允许使用null键和null值,与HashSet一样,不保证映射的顺序. 所有的key构成的集合是Set:无序的.不可重复的

  • Java使用HashMap映射实现消费抽奖功能

    本文实例为大家分享了Java实现消费抽奖功能的具体代码,供大家参考,具体内容如下 要求如下: 1.定义奖项类Awards,包含成员变量String类型的name(奖项名称)和int类型的count(奖项数量). 2.定义抽奖类DrawReward,包含成员变量Map<Integer, Awards> 类型的rwdPool(奖池对象).该类实现功能如下:a) 构造方法中对奖池对象初始化,本实验要求提供不少于4类奖品,每类奖品数量为有限个,每类奖品对应唯一的键值索引(抽奖号).b) 实现抽奖方法d

  • java编程进阶小白也能手写HashMap代码

    目录 什么是HashMap HashCode和数组 Hash碰撞 toString方法 百万级数据压测 步骤 1 来100w条数据,看看要花多久? 步骤 2 设计思路 步骤 3 添加一个size 步骤 4 先设计,后实现 步骤 5 扩容方法 步骤 6 reHash方法 步骤 7 新的问题出现 步骤 8 indexForTable方法 步骤 9 重新转测 步骤 10 再次测试100w数据 步骤 11 PK 原生JDK8的HashMap 补丁 步骤 1 put元素的bug 步骤 2 HashMap为

  • java面试散列表及树所对应容器类及HashMap冲突解决全面分析

    目录 性能分析 HashMap 产生冲突原因及解决方法 HashMap 解决冲突方法 jdk7 与 jdk8 中HashMap的区别 发生冲突 扩容 使用建议 散列表 Hashmap.hashtable.concurrentHashMap.hashset: 树: treemap.treeset.hashset treeset 继承自 treemap,hashset 继承自 hashmap : 性能分析 Map 是 Java 中的接口,Map.Entry 是 Map 的一个内部接口 Map 提供了

  • 深入浅出讲解Java集合之Map接口

    目录 一.Map接口继承树 二.Map接口中的常用方法 三.源码分析 1. HashMap的底层实现原理? 2.LinkedHashMap的底层实现原理(了解) 四.Collections工具类 一.Map接口继承树 Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) A.HashMap:作为Map的主要实现类:线程不安全的,效率高:存储null的key和value a.LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历. 原因

  • Java那点儿事之Map集合不为人知的秘密有哪些

    目录 前言 一.Map 二.HashMap的基本概念 三.HashMap集合的基本方法与使用 四.HashMap集合的遍历 五.HashMap集合的综合案例 六.总结 前言 上期我们说到了Collection集合,他是单列的集合,分为List集合和Set集合,今天我将继续分析一个双列集合也就是Map,为什么叫他双列集合呢? 往下看,你就知道了. 一.Map Map集合的特点 - 键值对映射关系 - 一个键对应一个值 - 键不能重复,值可以重复 - 元素存取无序 我们通过他的一个实现类HashMa

  • Java使用entrySet方法获取Map集合中的元素

    本文为大家分享了使用entrySet方法获取Map集合中元素的具体代码,供大家参考,具体内容如下 /*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这个关系的数据类型是Map.Entry ....entrySet方法返回值类型的具体写法为:Set< Map.Entry<KeyType , ValueType> > -----------

  • Java使用keySet方法获取Map集合中的元素

    本文为大家分享了Map集合中利用keySet方法获取所有的元素值,供大家参考,具体内容如下 /*--------------------------- Map集合中利用keySet方法获取所有的元素值: ....keySet方法:将Map中的所有key值存入到Set集合中, ....利用Set集合提供的迭代器获取到每一个key值,再通过key值获得相应的value值 ----------------------------*/ package pack03; import java.util.*

  • Java实现过滤掉map集合中key或value为空的值示例

    本文实例讲述了Java实现过滤掉map集合中key或value为空的值.分享给大家供大家参考,具体如下: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * 过滤掉map集合中key或value为空的值 * @author lmb * @date 2017-3-14 */ public

  • java的Map集合中按value值进行排序输出的实例代码

    java的Map集合中按value值进行排序输出的实例代码 import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Set; public class Test { public static void main(String[] args) { Map<String ,Integer> map = new Has

  • Java实现Map集合二级联动示例

    Map集合可以保存键值映射关系,这非常适合本实例所需要的数据结构,所有省份信息可以保存为Map集合的键,而每个键可以保存对应的城市信息,本实例就是利用Map集合实现了省市级联选择框,当选择省份信息时,将改变城市下拉选择框对应的内容. 思路分析: 1. 创建全国(省,直辖市,自治区)映射集合,即LinkedHashMap对象,使用Map接口的put()方法向集合中添加指定的省与城市的映射关系,其中值为String型一维数组. 代码如下: CityMap.java 复制代码 代码如下: import

  • 利用java读取web项目中json文件为map集合方法示例

    前言 本文主要介绍了关于java读取web项目中json文件为map集合的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实例介绍 假设当前项目web目录(/resource/test.json)下有一json文件如下: [ { "path": "content_111", "title": "文章1", "imgUrl": "../../../libs/img/ppt

  • Java 遍历取出Map集合key-value数据的4种方法

    将map集合存数据与取出数据全部放在一个类MapTest中,方便阅读与查看 随便创建一个包,在包中新建一个class文件,(也可以不建包,直接新建一个class文件) 新建class文件MapTest.java,代码如下: import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class

  • Java中的Map集合简单汇总解析

    Map接口简介 Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射.从Map集合中访问元素时,只要指定了Key,就能找到对应的Value, Map中的键必须是唯一的,不能重复,如果存储了相同的键,后存储的值会覆盖原有的值,简而言之就是键相同,值覆盖. Map常用方法 put(K key, V value) 添加数据,如果先前包含该键的映射,则替换旧值 get(Object key) 返回指定键所映射的值 Set<Map.Ent

  • Java实现Map集合遍历的四种常见方式与用法分析

    本文实例讲述了Java实现Map集合遍历的四种常见方式与用法.分享给大家供大家参考,具体如下: ~Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值 1. 无非就是通过map.keySet()获取到值,然后根据键获取到值 for(String s:map.keySet()){ System.out.println("key : "+s+" value : "+map.get(s)); } 2. 通过Map.Entry(

随机推荐