? ArrayList: 底层是动态数组,查询快,效率高,增删慢,默认长度为10,当添加的元素超过当前数组长度时,会进行扩容操作,创建一个新数组,长度为当前数组长度的1.5倍,扩容调用的是grow()方法,通过grow()方法中调用的Arrays.copyof()方法进行对原数组的复制,在通过调用System.arraycopy()方法进行复制,达到扩容的目的
? Vector: 底层是动态数组,默认长度为10,查询快,线程安全,效率慢
? LinkedList: 双向链表 增删快,效率高,查询慢,线程不安全
? HashMap: 数组+链表+红黑树 没有存储顺序 线程不安全
? TreeMap:红黑树 非线程安全 有存储顺序 默认key升序 如果需要改变排序方式,则需要使用比较器:comparator
? HashTable:数组+链表 线程安全
? LinkedHashMap:继承于hashMap hashMap是无序的 LinkedHashMap额外维护了一个双向链表用于保持迭代顺序 所以是有序的 默认为插入顺序
? HashSet+:散列集 允许为空 实际为HashMap的实例 值存在hahMap的key上
? TreeSet: 底层是TreeMap 特点 插入无序内部有序
? LinkedHashSet:底层为LinkedHashMap
? 1.7:数组+ 单链表
? 1.8:数组+链表+红黑树(当链表节点大于等于8,也就是默认阈值,会转化为红黑树,当链表节点小于等于6,转为普通链表当链表)
hashMap是线程不安全的,可以通过ConcurrentHashMap来得到一个安全的集合,hashTable是线程安全的
hashMap允许有空值,hashTable是不允许的
hashMap的默认容量为16,hashTable的默认容量为11,两者的负载因子均为0,75,当使用的容量大于乘以负载因子时,会触发扩容机制
原文:https://www.cnblogs.com/qrzu/p/14551448.html