本文主要为Java中Map集合的概述,至于具体类的实现,未作详细讲解,具体实现原理可参看相关链接以及JDK源码
[TOC]
1. Map
集合
-
java为数据结构中的映射定义了一个接口
java.util.Map
;它有四个实现类,分别是HashMap
、Hashtable
、LinkedHashMap
和TreeMap
-
Map
主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复 -
Map
架构image
2. HashMap
- 最常用的
Map
- 根据键的
HashCode
值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的 -
HashMap
最多只允许一条记录的键为Null;允许多条记录的值为Null
-
HashMap
不支持线程的同步,即任一时刻可以有多个线程同时写HashMap
;可能会导致数据的不一致。如果需要同步,可以用Collections
的synchronizedMap
方法使HashMap
具有同步的能力,或者使用ConcurrentHashMap
类 -
HashMap
的底层实现基于数组(动态可扩展)+链表(处理冲突)
3. Hashtable
- 它继承自
Dictionary
类 - 它不允许记录的键或者值为空
- 它支持线程的同步,
Hashtable
在写入时会比较慢
4. LinkedHashMap
- 继承
HashMap
,使用双向链表来维护key-value
的次序,迭代顺序与插入的顺序保持一致 - 迭代访问性能更好
5. TreeMap
- 实现
SortMap
接口 -
红黑树
数据结构,每个key-value
对即作为一个红黑树节点,根据key
排序,默认是按键值的升序排序
6. 其他
- 再次强调,
Set
与Map
的关系十分密切,Java
源码就是先实现了HashMap
,TreeMap
等集合,然后通过包装一个所有value
都为null
的Map
集合实现Set集合类
网友评论