Java的List、Set、Map

163 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

集合

集合存放的都是对象,即引用数据类型,基础数据类型不能放到集合中。

List(有序,可重复)

List是一个继承于Collection的接口。List是有序的集合,List中的每一个元素都有一个索引,第一个元素的索引值是0,往后的元素的索引值依次+1。

LinkedList(增删快,查找慢)

底层基于链表数据结构。允许为null。

ArrayList(增删慢,查找快)

ArrayList基于动态数组实现,其是我们最常用的集合。允许为null。

Set(无序,不能重复)

HashSet(无序,值唯一)

底层是由Hash Map实现,不允许有重复的值,使用该方式时需要重写equals()和hash Code()方法。

TreeSet(有序,值唯一)

TreeSet()是使用二叉树的原理对新add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。

Map(无序,key不能重复,vaule可重复)

Map的存储为键值对的结构,键(key)唯一,值(value)不唯一。

HashMap

底层基于数组+链表+红黑树实现。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,通过hashCode()和equals()保证元素唯一。

HashTable

底层是哈希表,不允许null键和null值,线程安全的,效率低,内部的方法基本都经synchronized关键字修饰。

TreeMap

TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序。

ConcurrentMap

底层采用分段的数组+链表实现,线程安全。

LinkHashMap

底层是哈希表和链表实现。

总结

List,Set,Map都是接口,前两个都继承了Collect接口,Map是映射表的基础接口。

集合是否有序是否允许重复
List可以重复
Set不能重复
Mapkey不能重复,value可以重复

它们之间的关系如图: image.png