java 集合框架(十六)Map
一.概述
Map是一个包含键值对的集合,一个map不能有重复的键(key),而且每个键至多只能对应一个值.Map同Collection一样,它的所有通用实现都会提供一个转换器构造函数,接收一个Map类型集合,并以此初始化自己,这样只要是Map的实现都可以相互之间转换.
和List与Set一样,Map强化了equal和hashCode以能对两个Map对象实现逻辑上的比较.如果两个Map实例有相同的键值对,那么它们是相等的.
Map的集合视角方法使Map可以像Collection一样进行操作元素
- KeySet--返回Map集合中键的Set集合
- Values--返回Map集合中值的Collection集合
- entrySet--返回Map集合中键值对对象的Set集合.在Map中提供了一个小的嵌套接口Map.Entry,它就是Map的键值对对象.
Map没有实现Iterable接口,所以集合视角是Map集合遍历的唯一手段,并且每次获取Map集合视角的时候,返回的是相同的对象.集合视角支持removal类型操作,但是任何情况下都不支持addition,对集合视角的removal操作会影响到Map集合本身,比如map.keySet().clear()将会清空map,反之亦然,这和Set,List的视图一样.
使用集合视角有一些有意思的用法,比如判断一个Map是否是另一个Map的子集
if (m1.entrySet().containsAll(m2.entrySet())) {}
类似,也可以判断两个Map的是否拥有相同的键
if (m1.keySet().equals(m2.keySet())) {}
三.子接口
Map和Set接口从形式上有些类似,类比与SortedSet和NavigableSet,Map也有SortedMap和NavigableMap两个接口,实际上Set的实现底层就是使用的Map存储数据.
SortedMap将元素的键以自然排序,或者依照给定的排序器来进行排序,同SortedSet,SortedMap提供了以下几种操作.
- 视图--允许从SortedMap截取并返回任意范围的元素视图
- 端点操作---可以直接获取集合头或尾的元素
- 排序器---返回用于排列元素的排序器
Map集合并无法直接实现遍历,而是通过它的集合视角遍历元素,所以SortedMap在返回的集合视角中,集合视角的迭代器也将会按SortedMap的顺序进行排序,同理的SortedMap中toArray方法返回的数组也是如此,toString方法会返回一个包含所有元素,并排序好的字符串.
四.实现
Map的实现可以分成通用实现,专用实现,并发实现
通用实现有三个,HashMap,TreeMap和LinkedHashMap.如果我们想要对元素进行一些排序操作,那么应当使用TreeMap,如果我们想要最好的性能而不在乎是否排序,应当使用HashMap,如果需要和HashMap接近的性能,并且可以以插入顺序遍历,那么应当使用LinkedHashMap.这和Set的通用实现很类似.
此外LinkedHashMap不仅提供了插入排序(insert order),同时还提供访问排序(access order),这样LinkedHashMap非常适用做本地缓存类(LRU)
专用实现也有三个,分别是Enummap,WeakHashMap和IdentityHashMap.
EnumMap是一个高性能的以枚举为键的Map集合,它内部是以数组实现.EnumMap将Map集合的丰富功能和安全性与数组的快速访问结合起来,如果想要实现一个用枚举映射值得结构,应当使用EnumMap.
WeakHashMap只存储弱引用类型的key,当它内部的元素的键不再被外界引用时,其键值对就可以被垃圾回收期(GC)回收,被从WeakHashMap中移除.WeakHashMap提供最简单利用弱引用的方法,这对实现”registry-like”数据结构非常有用.
IdentityHashMap存储元素时,不使用equal方法比较键对象,而是使用==来对比,适用于实现对象拓扑结构转换,比如对象序列化或深度拷贝时,作为一个”节点表”来跟踪处理那些已经处理过的对象引用.
Java.util.concurrent包含ConcurrentMap接口,它继承自Map,其putIfAbsent,remove,和replace方法是原子性的.ConcurrentHashMap是它的实现.
ConcurrentHashMap是一个高并发高性能的基于哈希表的实现,当检索元素时永不会阻塞,并且当执行update允许客户端选定执行并发级别更新.它是HashMap的替代,ConcurrentHashMap除了实现ConcurrentMap还支持HashTable所有遗留的独有的操作.
java 集合框架(十六)Map的更多相关文章
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- 【转】Java集合框架List,Map,Set等全面介绍
原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...
- 34、Java集合框架List,Map,Set等全面介绍(转载)
Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.C ...
- Java集合框架(六)—— Collections工具类
操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集 ...
- java 集合框架(十四)Queue
一.概述 Queue一种队列结构集合,用来存储将要进行处理的元素.通常以FIFO的方式排序元素,但这并不是必须的.比如优先度队列就是一个例外,它是以元素的值来排序.但无论怎样,每个Queue的实现都必 ...
- java 集合框架(十)List
一.概述 List是一种有序集合,有时也被称为序列,可以有重复的元素.List集合相比Collection,除了直接继承的方法外,有以下拓展的操作方法 位置访问---可以基于元素索引来操作元素,比如g ...
- java 集合框架(十五)Deque
一.概述 Deque是Queue的子接口,我们知道Queue是一种队列形式,而Deque则是双向队列,它支持从两个端点方向检索和插入元素,因此Deque既可以支持LIFO形式也可以支持LIFO形式.D ...
- 【由浅入深理解java集合】(一)——集合框架 Collction、Map
本篇文章主要对java集合的框架进行介绍,使大家对java集合的整体框架有个了解.具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set,List,Queue. ...
- Java集合(十)实现Map接口的HashMap
Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是“链表散列”,也就是数组+链表 ...
随机推荐
- yum 安装zabbix2.4 /3.2.4
yum 安装zabbix2.4 首先zabbix需要的环境是web环境,默认的是lamp或者lnmp,讲道理,要是使用tomcat也是可以的,不过实验没有成功 系统:centos6.8_x64 附yu ...
- 【转】 SED多行模式空间
1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...
- python --- mulitprocessing(多进程)模块使用
1. 什么是进程? 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执 ...
- 华硕笔记本电脑Win10改Win7设置U盘启动
华硕笔记本电脑Win10改Win7设置U盘启动 尝试开机按ESC选择前面没有UEFI项的USB启动: 1,在BIOS设置里advanced菜单,把 Lgeacy USB support选择为enabl ...
- WPF中,多key值绑定问题,一个key绑定一个界面上的对象
问题说明: 当用到dictionary<key,value>来储存数据的时候,有时候需要在界面上绑定一个key来显示value,这时候有两种思路: 一种是写一个自定义的扩展类,类似Bind ...
- linux下硬盘uuid查看及修改设置
查看硬盘UUID 方法一:ls -l /dev/disk/by-uuid方法二:blkid /dev/sdb1 修改硬盘UUID: uuidgen 会返回一个合法的 uuid,结合 tune2fs 可 ...
- ABP官方文档翻译 6.2.1 ASP.NET Core集成
ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...
- Hadoop学习笔记四
一.fsimage,edits和datanode的block在本地文件系统中位置的配置 fsimage:hdfs-site.xml中的dfs.namenode.name.dir 值例如file:// ...
- .net使用AsposeWord导出word table表格
本文为原创,转载请注明出处 1.前言 .net平台下导出word文件还可以使用Microsoft.Office.Interop和NPOI,但是这两者都有缺点,微软的Office.Interop组件需要 ...
- [SCOI2007]最大土地面积
首先,最大四边形的四个点一定在凸包上 所以先求凸包 有个结论,若是随机数据,凸包包括的点大约是\(\log_2n\)个 然鹅,此题绝对不会这么轻松,若\(O(n^4)\)枚举,只有50分 所以还是要想 ...
