相同点
1、都属于Map:
Map主要用于存储键(key)值(value)对,根据键得到值,因此键不允许重复,但允许值重复。
2、都是线程安全的。
不同点
项 | HashMap | TreeMap | LinkedHashMap |
---|---|---|---|
按插入顺序存放 | 不支持 | 不支持 | 支持。遍历时,按插入的顺序出结果。 |
按key值排序 | 不支持。按照hashCode进行输出 | 支持。默认按key升序。可用Comparator自定义排序。用Iterator遍历TreeMap时,结果是排过序的。 | 不支持 |
null | key和value均允许为null。只允许一条记录的key值为null(多条会覆盖);允许多条记录的Value为null。 | 不允许key的值为null。 | key和value均允许为null。只允许一条记录的key值为null(多条会覆盖);允许多条记录的Value为null。 |
数据结构 | 数据 + 链表 + 红黑树(put 和get 操作,基本可以达到常数时间的性能) | 红黑树。(get 或 put操作的时间复杂度时O(log(n))) | HashMap + 双向来年表 此类是 HashMap的子类 |
1、HashMap、LinkedHashMap的key 和 value 都允许为 null.
2、ConcurrentHashMap、ConcurrentSkipListMap、Hashtable的key和value都不允许为null。