Java8源码-Map总结
来源:互联网 发布:穿越火线刮刮乐软件 编辑:程序博客网 时间:2024/06/05 08:15
前段时间已经学习了HashMap、Hashtable、LinkedHashMap、WeakHashMap、TreeMap的数据结构、实现原理、源码等等。下面LZ就Map的这几个实现类做一个简单的总结。
推荐阅读:
- Java8源码-Map整体架构
- Java8源码-HashMap
- Java8源码-Hashtable(1)
- Java8源码-Hashtable(2)
- Java8源码-LinkedHashMap
- Java8源码-WeakHashMap
- Java8源码-TreeMap
Map的整体结构
先来回顾下Map的整体结构。
层次结构图
Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承Collection接口。
- AbstractMap:实现了Map接口的抽象类。Map的基本实现,其他Map的实现类可以通过继承AbstractMap来减少编码量。
- SortedMap:继承Map。保证按照键的升序排列的映射,对entrySet、keySet和values方法返回的结果进行迭代时,顺序就会反映出来。
- NavigableMap:继承SortedMap,含有返回特定条件最近匹配的导航方法。
- HashMap:Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,特点是访问速度快,遍历顺序不确定,线程不安全,最多允许一个key为null,允许多个value为null。可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap类。
- HashTable:Hashtable和HashMap从存储结构和实现来讲有很多相似之处,不同的是它承自Dictionary类,而且是线程安全的,另外Hashtable不允许key和value为null。并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁。Hashtable不建议在新代码中使用,不需要线程安全的场合可以使用HashMap,需要线程安全的场合可以使用ConcurrentHashMap。
- LinkedHashMap: LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现。它维护着一个双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
- WeakedHashMap: 以弱键实现的基于哈希表的Map。在WeakHashMap中,当某个键不再正常使用时,将自动移除其条目。
- TreeMap : Map接口基于红黑树的实现。
实现类比较
HashMap与Hashtable
不同点
Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换。
相同点
- 都实现了Map、Cloneable、java.io.Serializable接口。
- 数据结构中都存在数组+链表。
HashMap与LinkedHashMap
不同点
相同点
- 都是基于哈希表的实现。
- 存储的是键值对映射。
- 都继承了AbstractMap,实现了Map、Cloneable、Serializable。
- 它们的构造函数都一样。
- 默认的容量大小是16,默认的加载因子是0.75。
- 都允许key和value为null。
- 都是线程不安全的。
HashMap与WeakHashMap
不同点
相同点
- 都是基于哈希表的实现。
- 都以键值对的形式存储数据。
- 都继承了AbstractMap,实现了Map接口。
- 都支持key和value为null。
- 都是非同步的。
- 都是无序的。
HashMap与TreeMap
不同点
相同点
- 都以键值对的形式存储数据。
- 都继承了AbstractMap,实现了Map、Cloneable、Serializable。
- 都是非同步的。
阅读全文
1 0
- Java8源码-Map总结
- Java8源码-Map整体架构
- Java8源码-List总结
- java8 ArrayList源码阅读【2】- 总结
- java8 LinkedList源码阅读【2】- 总结
- [Java8 Collection源码+算法+数据结构]-Map+Set(一)
- 【Java8源码分析】IO包-InputStream、FileInputStream和BufferedInputStream总结
- 【Java8源码分析】IO包-Reader、BufferedReader和Scanner总结
- java8 forEach Map List
- java8-遍历map
- java8 的 map 排序
- java8 Stream map()
- JDK源码学习系列12----Map总结
- java8的源码
- ConcurrentHashMap源码分析--Java8
- java8 ArrayList源码阅读
- java8 LinkedList源码阅读
- Java8 - HashMap源码
- 抓包简单使用介绍
- effective C++条款四十二解读
- Git详解之九 Git内部原理
- Linux中rz和sz命令用法
- kafka管理器kafka-manager部署安装
- Java8源码-Map总结
- 把数组排成最小的数
- ubuntu 修改默认root密码
- ionic2 遇到的一些小问题
- android UiAutomator如何根据颜色判断控件的状态
- html学习7—目录
- 小程序文档整理之 -- API(调试接口)
- Git详解汇总
- MyISAM和InnoDB的区别