Java容器类详细解析

先上图

Java容器类

上图描述了java中容器类的关系(只是展示了主要的接口和实现类)

下面来一个个的说明
List 特点:元素有序,可以重复
主要实现类

———–>ArrayList:
1.底层采用数组形式存储元素(允许null),源码体现
这里写图片描述
2.size自动扩容,以当前容量的50%的容量增加,源码体现
这里写图片描述
3.在中间插入和删除元素效率低:例如,要在中间插入元素就需要把要插入的位置之后的所有元素向后移动一位,空出来要插入的位置,然后把新元素放到此位置完成操作。
4.获取某位置的元素效率高

———–>LinkedList:
1.存储的元素以插入的顺序保存(允许null)
2.底层采用链表形式存储元素,记录了本身和上一个和下一个元素,源码体现
这里写图片描述
3.插入和删除效率高:例如中间位置插入元素,只需要在此位置上断开其prev和next的链接然后放入新元素,再补上元素之间的连接即可,只需要操作某个元素的指引即可,所以插入和删除的效率高
4.获取某位置的元素效率低。

Set 特点:元素不可重复
主要实现类

———–>HashSet:
1.元素无序,利用哈希算法来算出每个元素要存储的位置(允许null)
2.内部采用HashMap来存储,只用到了HashMap中的key来存储(因为value都一样),源码体现
这里写图片描述

这里写图片描述

这里写图片描述

———–>LinkedHashSet: 详细介绍参考后面的LinkedHashMap
1.继承自HashSet,只不过在HashSet的基础上维护了插入顺序
2.底层利用LinkedHashMap来实现

———–>TreeSet: 详细介绍参考后面的TreeMap
1.底层采用了TreeMap的方式来实现,类似于LinkedHashSet的方式,源码体现
这里写图片描述

Map 特点:Key-Value方式保存元素
主要实现类

———–>HashMap:
1.工作原理:底层采用数组+链表的结合形式来保存元素,利用内部的Map.Entry静态内部类来生成entry对象(entry中保存了key-value)。存储方式:首先利用key的hashcode方法(哈希算法)来计算在数组中要存储的位置,然后根据equels方法来计算链表中的位置,从而保存元素。当要根据key来获取value的时候一样,也是利用key的哈希算法计算在数组中的位置,然后根据equels获取链表中的位置,去除entry从而获取value
2.load_factor默认为0.75,意思就是当HashMap的容量超过当前容量的75%的时候就会扩容。源码体现
这里写图片描述

———–>LinkedHashMap:
1.继承自HashMap,在HashMap的基础上维护了插入顺序
2.基本操作类似HashMap,重新定义了Entry,来实现自己链接列表的特性

———–>TreeMap:
1.底层采用红黑树的方式实现,所以对键有默认的排序方式

有错误的地方欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值