Java | Map集合
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>集合
LinkedHashMap
是HashMap
下面的子类,HashMap
的所有的方法,LinkedHashMap
都有,但是LinkedHashMap
比HashMap
好用的一点是,它可以保证存取的顺序一致。
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集合的更多相关文章
- Java Map 集合实现类
Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据.Map的key不允许重复.key与valu ...
- Java Map集合 遍历 五种方式(包含 Lambda 表达式遍历)
示例代码如下: package com.miracle.luna.lambda; import java.util.HashMap; import java.util.Iterator; import ...
- java Map集合对比分析
1.Map:Map是所有map集合的顶级父接口,用于key/value形式的键值对,其中每一个key都映射到一个值,key不能重复. 2.TreeMap:该map将存储的键值对进行默认排序,并且还能够 ...
- Java Map集合按照key和value排序之法
一.理论基点 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black-Tre ...
- Java学习笔记之:Java Map集合
一.介绍 通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的. 二.笔记 /** * Map:接口. 不是collection的子类 key -value 键值对 key唯一不能重 ...
- java map集合的知识
/** * Map用于存储键值对,不允许键重复,值可以重复. * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度. * H ...
- java map集合 --遍历
1.Map 遍历: Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a& ...
- java Map集合学习
学习语法还是从例子着手: FileDao fileDao=new FileBeanDaoImpl(); FileBean fileBean=new FileBean(); listBean=fileD ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
随机推荐
- 深入剖析 MySQL 自增锁
之前的文章把 InnoDB 中的所有的锁都介绍了一下,包括意向锁.记录锁...自增锁巴拉巴拉的.但是后面我自己回过头去看的时候发现,对自增锁的介绍居然才短短的一段. 其实自增锁(AUTO-INC Lo ...
- GO学习-(7) Go语言基础之流程控制
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码. ...
- Go基础结构与类型04---基本数据类型
package main import "fmt" func main() { //整型 var a byte = 123 var b rune = 123 var c int = ...
- STM32使用DMA发送串口数据
1.概述 上一篇文章<STM32使用DMA接收串口数据>讲解了如何使用DMA接收数据,使用DMA外设和串口外设,使用的中断是串口空闲中断.本篇文章主要讲解使用DMA发送数据,不会讲解基础的 ...
- Kubernetes 实战——发现应用(Service)
一.简介 服务:一种为一组功能相同的 Pod 提供单一不变的接入点的资源.服务 IP 和端口不会改变 对服务的连接会被路由到提供该服务的任意一个 Pod 上(负载均衡) 服务通过标签选择器判断哪些 P ...
- 【NX二次开发】Block UI 整数表
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- 【题解】localmaxima 数论
# T749 localmaxima 权限限制没有超链接 题目描述 Description 给出一个排列,若其中一个数比它前面的数都大,则称为localmaxima数,求一个随机排列中localmax ...
- 【单调栈】【前缀和】【二分查找】8.28题解-long
long 题目描述 AP神牛准备给自己盖一座很华丽的宫殿.于是,他看中了一块N*M的矩形空地.空地中每个格子都有自己的海拔高度.AP想让他的宫殿的平均海拔在海平面之上(假设海平面的高度是0,平均数都会 ...
- Spring Cloud Data Flow整合UAA使用外置数据库和API接口
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制 ...
- 如何使用 jest 和 lint-staged 只检测发生改动的文件
我们现在在推进 EPC 的过程中,单元测试是必备的技能,在本地的 Git commit 之前进行单测非常有必要,总不能把所有的单测的压力都放在流水线上. 毕竟在流水线运行单测的成本还是挺高的,从 pu ...