一、connection 接口:
1. List 有序,可重复
ArrayList :
-
‘ArrayList 集合初始化容量是 10;底层是 Object类型的数组;扩容为原容量的 1.5 倍;建议给定一个预估的初始化容量,减少扩容次数
-
优点:底层数据结构是数组,查询快,增删慢
-
缺点:随机增删元素效率较低(向末尾加元素的话效率还是很高的)
LinkedList:
-
底层采用了双向链表的数据结构;随机增删效率较高,检索效率较低
-
链表中的元素在空间存储上是不连续的
Vector
-
底层采用了数组这种数据结构,它是线程安全的( Vector 中所有的方法都有 synchronized 关键字修饰)
2. Set 无序(存进去与取出来的顺序不一致),唯一
HashSet:
- 其中存储的元素是无序的,主要是因为它是靠对象的哈希值来确定元素在集合中的位置的
- 其中的元素是不可重复的,主要是靠对象的 hashCode 和 equals 方法来判断对象是否重复的
- 实际上 HashSet 集合在 new 的时候,底层实际上是 new 了一个 HashMap 集合,向 HashSet 集合中存储元素,实际上是存储到了HashMap集合中的 key 中了。
- HashMap 集合是一个哈希表数据结构
- HashSet 集合初始化容量是 16 ,扩容之后是原容量的 2 倍
TreeSet:可排序集合
-
TreeSet 集合底层实际上是 TreeMap 在 new TreeSet 集合的时候,底层实际上是 new 了一个 TreeMap 集合,往 TreeSet 集合中放数据的时候,实际上是将数据放到了 TreeMap 集合中的 key 中了
-
TreeMap 集合底层采用了二叉树的数据结构
-
存储的元素可以自动按照大小顺序自动排序
如果一个类,实现了 java.lang.Comparable 接口,那么这个类的俩个对象就是可以比较大小的。
二、Map 接口:key 与 value
HashMap:不同步的
- HashMap 集合底层是哈希表数据结构,是非线程安全的
- 在 JDK8 之后,如果哈希表单向链表中元素超过 8 个,单向链表这种数据结构就会变成红黑树数据结构。当红黑树上的节点数量小于 6 时,会重新把红黑树变成单向链表数据结构。这种方式是为了提高检索效率
- 初始化容量为 16,默认加载因子是 0.75
- HashMap 集合中的 key 与 value 允许为 null
TreeMap:
- 它可以对key值进 行排序,同时构造器也可以接收一个比较器对象作为参数。支持key值的自然排序和比较器排序俩种方 式。(支持key排序)
HashTable: 同步的
- HashTable 集合的层也是哈希表数据结构,是线程安全的,其中所有的方法都带有 synchronized 关键字,效率低
- HashTable 的 key 和 value 不允许为 null;
- 初始化容量为 11
- 集合扩容是:原容量的 2 倍+1