开启掘金成长之旅!这是我参与「掘金日新计划 · 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 | 是 | 不能重复 |
| Map | 否 | key不能重复,value可以重复 |
它们之间的关系如图: