java三大容器

结构图:

collection:集合的顶层接口,不能被实例化;

list: 列表容器,有序,可重复;

set: 集合容器,无序,唯一;

map:图容器 ,key-value存储数据;

 

arraylist: 数组列表,线程不安全,初始化设置指定长度(默认为10),自动扩容(50%)

vector: 同步数组,线程安全,初始化指定长度,自动扩容(100%)

linkedlist:链表: 链式结构;  

!数组结构查询效率低,链表结构插入删除效率高;因为数组插入删除需要该元素后面的所有元素都要移动

 

hashset:哈希集合,基于hashmap实现,集合元素可以为null;通过元素的equals和hashcode方法来判断元素重复

treeset: 树集合,基于treemap实现,有序(自然排序和定制排序),compareTo方法排序,通过元素的equals和hashcode方法来判断元素重复

linkedhashset: 链式哈希集合,基于linkehashmap实现,有序(添加顺序),继承hashset

!集合扩容机制同map

 

hashmap: 哈希图,数组+链表结构,元素可为null,数组初始大小为16,负载因子3/4,最大长度2^30,扩容时将旧数据取出放到新的hashmap中,并且新的位置为原位置或原位置+扩容大小

,扩容(100%),当元素哈希冲突(哈希值相等)时在该数组点延申链表,jdk1.8中当哈希冲突到达8链表转换为红黑树,jdk1.8由头插法改成尾插法防止多线程导致死循环

hashtable: 同步哈希表,同步的hashmap,默认大小为11,扩容(100%)

treemap: 树图,以红黑树结构,排序

linkehashmap: 链式哈希图,数组+链表(+红黑树)+双向链表,有序

!hashmap大小为2的幂次方,因为在hashmap中定位是hashcode&(length-1)计算 length为2的幂次方 那么 length-1的二进制数为11111……

posted on 2021-03-26 21:48  .11  阅读(383)  评论(0编辑  收藏  举报