Java集合-Map (二)

78 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

大家好,我是尚影嫣🌷,一名Java后端程序媛。如果您喜欢我的文章,欢迎点赞➕关注❤️,让我们一起成为更好的我们~🥰

image.png

Map集合的实现类

HashMap

  • HashMap底层是哈希表,查询速度非常快。jdk1.8之前是数组+单向链表,1.8之后是数组+单向链表/红黑树 ,链表长度超过8时,换成红黑树。
  • HashMap是无序的集合,存储元素和取出元素的顺序可能不一致,HashMap集合是多线程的、线程不安全的,速度较快。
  • HashMap存储自定义类型键值,Map集合保证key是唯一的。作为key的元素,必须重写hashCode方法和equals方法以保证键的唯一性。
  • HashMap是Map中的实现类,特点是由键决定的:无序、不重复、无索引。相比父类,没有额外加其他方法,直接使用Map里面的方法。HashMap跟HashSet底层原理是一样的,都是哈希表结构,HashMap的每个元素包含两个值。Set系列集合的底层是Map实现的,不过Set集合中的元素只用到key数据,没用到value数据。

Hashtable

Hashtable<K,V> implements Map<K,V>

Hashtable底层是哈希表,是同步的,是一个单线程、线程安全的集合,速度较慢。HashMap底层也是哈希表,但是线程不安全的集合,是多线程集合,速度较快。HashMap可以存储null键,null值。Hashtable不能存null键或者null值。

LinkedHashMap

特性由键决定:有序、不重复、无索引。有序体现在能保证存储和取出的元素顺序一致,其原理是底层数据结构为哈希表,每个键值对元素额外的多了一个双链表的机制来记录存储的顺序。

TreeMap

特性由键决定:不重复、无索引、可排序。按照键数据的大小排序(默认升序),只能对键排序。TreeMap集合是一定要排序的,可以默认排序,也可以将键按照指定规则进行排序。TreeMap跟TreeSet的底层原理一样。