Map接口及其实现类及常用方法

2024-04-09 09:44

本文主要是介绍Map接口及其实现类及常用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.Map接口及其实现类

java.util.Map : 存储一对一对的数据(key-value键值对)|----->HashMap : 主要实现类,线程不安全,效率高,可以添加null的键值对;底层使用数组+单向链表+红黑树。|------->LinkedHashMap : 是HashMap的子类,在HashMap的数据结构的基础上,添加了一对双向链表。用来确定前驱和后继,进而我们在遍历元素时,可以按照元素添 加的顺序来显示。开发中,对于频繁遍历操作,可以使用此类.|----->TreeMap : 底层使用红黑树存储,可以按照添加的key-value中的key元素指定的属性的大小来遍历|----->Hashtable : 古老实现类,线程安全,效率低。不可以添加null的key-value的键值对;底层使用数 组+单向链表结构|-------->Properties : 其key-value都是String类型,常用来处理属性文件。

2.HashMap中元素的特点

(1). HashMap中一个key必须对应着一个value,比如数学函数中的一一对应的关系.所以必须保证key是唯一的,不可重复的.

(2). HashMap中所有的key都是无序的,彼此之间不可重复的.所以所有的key构成Set集合.故key所在的类要重写hashCode()和equals().

(3). HashMap中所有的value可以是无序的,可重复的.所以的value构成Collection集合.(因为value可以重复,所以value不是Set集合;又因为value是无序的,也不是List集合)value所在的类要重写equals方法.

(4). HashMap中的一个key-value,构成一个entry.

(5). HashMap中所有的entry之间是不可重复的,无序的.所以构成Set集合.但由于key一定是不可重复的,所以entry集合也一定是不可重复的.所以无需重写hashCode()和equals().

3.Map中常用方法

c6a8b19f436a487cb24e72e3e3e2ede6.png

(1). 增 : 

  • put(Object key, Object value) : 将指定的key-value键值对添加到map对象中.
  • putAll(Map m) : 将m中所有的键值对添加到当前map对象中.

(2). 删 : 

  • Object remove(Object key) : 将key对应的键值对从当前对象中移除,并返回value值.
  • void clear(Map map) : 清空map对象中的所有键值对.

(3). 改 : 

  • put(Object key, Object value) 修改key对应的value值.
  • putAll(Map map)

(4). 查 :

  • Object get(Object key) : 获得key值对应的value值.

(5). 长度 : 

  • int size() : 返回map对象中entry的个数.

(6). 元视图操作的方法

  • Set keySet() : 将map对象中的key值的集合作为Set返回.
  • Collection values() : 将map对象的value值的集合作为Collection返回.
  • Set entrySet() : 将map对象中的entry作为Set返回.
@Testpublic void Test1() {Map map = new HashMap();map.put(new Person("雷军", 50), 50);map.put(34, 45);map.put("hexua", 20);map.put(45, 89);Map map1 = new HashMap();map1.put(34, 78);map1.put(12, 23);map.putAll(map1);//此处返回value值,只是我没有接收map.remove(34);//返回key值的Set集合for (Object obj : map.keySet()) {System.out.println(obj);}System.out.println("*****************");//返回value值的Collection集合for (Object obj : map.values()) {System.out.println(obj);}//返回entry的Set集合System.out.println("*****************");for (Object obj : map.entrySet()) {System.out.println(obj);}}控制台
Person{name='雷军', age=50}
12
45
hexua
*****************
50
23
89
20
*****************
Person{name='雷军', age=50}=50
12=23
45=89
hexua=20

问 : 为什么不能直接for-each循环遍历map对象?

很简单,查看源码发现,Map接口没有继承Iterable类.而Collection接口继承了Iterable,所以需要调用keySet等方法,返回Collection或者Set集合用来遍历.

我们也可以用如下方法进行遍历.

for (Object obj : map.entrySet()) {Map.Entry e = (Map.Entry) obj;System.out.println(e.getKey() + "->" + e.getValue());}控制台
Person{name='雷军', age=50}->50
12->23
45->89
hexua->20

查看源码发现,Map接口中定义了Entry接口(有点像内部类,一个类的内部定义了另一个类).Entry接口中定义了getKey()和getValue().使用entrySet方法返回entry的集合.entry的类型是Map.Entry,故强制类型转换调用该两个方法获取一个entry中的key和value.

 

这篇关于Map接口及其实现类及常用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887816

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("