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   .11  阅读(412)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示