Map集合

在现实生活中,有非常多的东西,是和另外一种东西对应的,并且还是唯一的,比如:身份证号与个人,个人与手机,一夫一妻。。。等,这种关系就是对应关系,又叫做映射。Java为这种数据类型提供了专门的接口,就是Map<K,V>接口。

Map<K,V>集合的特点

  • Map<K,V>集合是一个双列集合,一个元素包含两个值。
  • Map<K,V>集合中的元素,key和value的数据类型可以相同,也可以不相同。
  • Map<K,V>集合中的元素,key是不允许重复的,但是value可以重复。
  • Map<K,V>集合中的元素,key和value是一一对应的。

Map<K,V>集合与Collection的区别

  • Collection中的集合,元素是孤立存在的,而Map<K,V>集合中的元素是成对出现的。
  • Collection集合称为单列集合,Map<K,V>集合称为双列集合。

Map<K,V>的常用方法

Map<K,V>中定义了很多方法,都是它的子类常用的方法,只要会用这几个方法,Map集合就等于会了,只用再了解一下,每一个子类的做用就行了。

方法

  • public V put(K key,V value); 把指定的键与指定折值添加到Map集合中。
  • public V remove(Object key); 把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
  • public V get(Object key); 根据指定的键,在Map集合中取对应的值。
  • public Set<K> keySet(); 获取Map集合中所有的键,存到Set集合中去。
  • public Set<Map.Entry<K,V>> entrySet(); 获取Map集合中所有的键值对对象的集合。

使用

public V put(K key,V value); 把指定的键与指定折值添加到Map集合中。

    Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
//只可以存储一个null键
map.put(null, "e");
//Map集合是无序的
System.out.println(map); //{null=e, 1=a, 2=b, 3=c, 4=d}

public V remove(Object key); 把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。

   //数据为上面的数据
//删除key为null的元素
String remove = map.remove(null);
//返回值是被删除的元素的value
System.out.println(remove); //e
System.out.println(map); //{1=a, 2=b, 3=c, 4=d}

public V get(Object key); 根据指定的键,在Map集合中取对应的值。

   String s = map.get(2);
System.out.println(s); //b
System.out.println(map); //{null=e, 1=a, 2=b, 3=c, 4=d}

public Set<K> keySet(); 获取Map集合中所有的键,存到Set集合中去。

   //取出Map集合中所有的key
Set<Integer> integers = map.keySet();
//对Map集合进行遍厉的时候才使用的
for (Integer integer :integers) {
//用get方法通过key来获取值
String s = map.get(integer);
System.out.println(s);
}
//也可以使用Set集合里面的迭代器来进行循环

public Set<Map.Entry<K,V>> entrySet(); 获取Map集合中所有的键值对对象的集合。

    //这也是一种遍厉Map集合的方法
Set<Map.Entry<Integer, String>> entries = map.entrySet();
for (Map.Entry<Integer, String> entry : entries) {
//用Map.Entry里面的getKey和getValue方法来获取key和value
System.out.print("key:" + entry.getKey());
System.out.println("value:" + entry.getValue());
/*
key:nullvalue:e
key:1value:a
key:2value:b
key:3value:c
key:4value:d
*/
}

Entry<K,V>Map接口,中是一个内部接口,并且在所有的实现类中实现,这个实现类的做用是用来记录Map集合中所有的Key和对应的Value

HashMap<K,V>集合

存储数据用的是哈希表结构,元素存取是无序。因为要保证唯一,所以必须要保证,key的对象必须要重写hashCode()方法和equals()方法。


因为基本数据类型里面都重写了这两个方法,所以我自定义一个对象做为key值,看看重写了这两个方法和不重写了这两个方法的区别。

重写:

    Map<Student, String> stuMap = new HashMap<>();
stuMap.put(new Student("张三", 18), "不重写");
stuMap.put(new Student("张三", 18), "不重写");
stuMap.put(new Student("王五", 13), "不重写");
stuMap.put(new Student("赵六", 15), "不重写");
System.out.println(stuMap);//四个数据全有
//{Student{name='王五', age=13}=不重写, Student{name='张三', age=18}=不重写,
// Student{name='张三', age=18}=不重写, Student{name='赵六', age=15}=不重写}

不重写:

    Map<Student, String> stuMap = new HashMap<>();
stuMap.put(new Student("张三", 18), "重写");
stuMap.put(new Student("张三", 18), "重写");
stuMap.put(new Student("王五", 13), "重写");
stuMap.put(new Student("赵六", 15), "重写");
System.out.println(stuMap);//重复的张三没有了
//{Student{name='张三', age=18}=不重写, Student{name='赵六', age=15}=不重写,
// Student{name='王五', age=13}=不重写}

上面的重复虽然保证唯一了,但是没有保证有序,所以我们就要用到LinkedHashMap集合。

LinkedHashMap<K,V>集合

LinkedHashMapHashMap下面的子类,HashMap的所有的方法,LinkedHashMap都有,但是LinkedHashMapHashMap好用的一点是,它可以保证存取的顺序一致。

    Map<Student, String> stuMap = new LinkedHashMap<>();
stuMap.put(new Student("张三", 18), "重写");
stuMap.put(new Student("张三", 18), "重写");
stuMap.put(new Student("王五", 13), "重写");
stuMap.put(new Student("赵六", 15), "重写");
System.out.println(stuMap);//顺序和存的顺序一样了
//{Student{name='张三', age=18}=重写, Student{name='王五', age=13}=重写,
//Student{name='赵六', age=15}=重写}

上面的这两个实现类都是同步的!


细节决定成败!

个人愚见,如有不对,恳请扶正!

Java | Map集合的更多相关文章

  1. Java Map 集合实现类

    Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据.Map的key不允许重复.key与valu ...

  2. Java Map集合 遍历 五种方式(包含 Lambda 表达式遍历)

    示例代码如下: package com.miracle.luna.lambda; import java.util.HashMap; import java.util.Iterator; import ...

  3. java Map集合对比分析

    1.Map:Map是所有map集合的顶级父接口,用于key/value形式的键值对,其中每一个key都映射到一个值,key不能重复. 2.TreeMap:该map将存储的键值对进行默认排序,并且还能够 ...

  4. Java Map集合按照key和value排序之法

    一.理论基点 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black-Tre ...

  5. Java学习笔记之:Java Map集合

    一.介绍 通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的. 二.笔记 /** * Map:接口. 不是collection的子类 key -value 键值对 key唯一不能重 ...

  6. java map集合的知识

    /** * Map用于存储键值对,不允许键重复,值可以重复. * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度. * H ...

  7. java map集合 --遍历

    1.Map 遍历: Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a& ...

  8. java Map集合学习

    学习语法还是从例子着手: FileDao fileDao=new FileBeanDaoImpl(); FileBean fileBean=new FileBean(); listBean=fileD ...

  9. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

随机推荐

  1. 拖动登录框 HTML+CSS+js

    先上效果 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. Jenkins 基础篇 - 任务创建

    前面了解了 Jenkins 上各种任务的区别后,我们就来实践应用下,先创建一个[文件夹]类型的任务,将我们目前的一些基础的演示任务[移动]到文件夹里面去,这样可以先做个简单的分类. 新建一个[文件夹] ...

  3. 【odoo14】【用户侧】权限配置

    以下内容仅适用于odoo的客户,不适用于开发人员. 下文介绍中涉及的概念及UI均是在odoo14社区版中进行. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2.2 UI方式实现权限 ...

  4. SpringMVC=>web.xml基本配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...

  5. VBScript学习第一天

    编码工具:VbsEdit 1.MsgBox() 毫无例外,第一个要学的就是"Hello, World!" 直接输入: MsgBox ("Hello, World!&quo ...

  6. Unity 2018.3.0f 版本用C#编程启动VS时出现"Visual Studio 2010 Shell 无效的许可证数据"的解决办法

    C#编程时,启动VS出现的问题如图: 网上有提到用更改注册表的方式,亲测效果未发生改变,在不确定修改后效果如何时,尽量先将原有的数据备份下来: 本文介绍楼主用另外一种方式解决的: 由于脚本系统默认启动 ...

  7. SQL SERVER常用语法记录

    用于记录SQL SERVER常用语法,以及内置函数. 以下语句包含: WITH 临时表语法 ROW_NUMBER()内置函数,我一般主要是用来分页.针对于查出来的所有数据做一个数字排序 分页的BETW ...

  8. 永远的Ace 团队作业4—团队项目需求建模与系统设计(1)

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu-da ...

  9. 说说对 Node 中的 fs 模块的理解? 有哪些常用方法?

    一.是什么 fs(file system),该模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装 可以说,所有与文件的操作都是通过fs核心模块实现 导入模块如下: const fs  ...

  10. leetcode1141 N*3矩阵。阿里笔试no.1

    你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同). 给你网格图的行数 n . 请你返 ...