Java集合逐一讲解

逐一讲解Java集合

集合总体结构图如下:
在这里插入图片描述

一、ArrayList集合

在这里插入图片描述

  • 1层中最底层只有ArrayList,跟vector比较它是线程不安全的,数组长度增长率为50%,插入删除没有linkedlist快,但是查找速度快,2层为serializable,cloneable和randomaccess都表示标记接口,serializable主要用于序列化,cloneable作用为复制,要注意用的情况,因为会把地址访问也复制,所以就是会出现一种情况是复制出来和原来的相关联的,谨慎使用,randomaccess用于使算法在随机和顺序访问的list中表现的更加高效(Collections中有一个方法),3层是ArrayList继承的一个抽象类abstractlist类,子类必须实现的方法为get方法因为为抽象方法,4层为abstractcollection抽象类以及abstractlist的父级类层和list接口类已经ArrayList的直接实现类,5层为collection根接口类同时也是abstractcollection抽象类的实现类和list接口类的继承类,6层为iterable接口类,也是collection接口类的继承类,主要用于遍历集合类的接口类,所有集合类都实现了此类。

二、stack和vector集合

在这里插入图片描述

  • stack和vector,是stack为栈先进后出,然后是stack是继承实现类vector的,vector和stack都是数组类型的,但不同的是vector向量类实现了动态数组,他相比于ArrayList是他的两倍,因为他是100%,而且相对于ArrayList的另一个好处是线程更加安全。

三、LinkedList集合

在这里插入图片描述

  • linkedlist,Deque和queue都是接口,是一个队列类似,但是区别是queue是头部删除,尾部添加,而Deque接口是继承queue接口的,他另外支持双向检索和插入元素,相信我们注意到linkedlist少实现了randomassess接口标记,意思是不支持快速算法,因为他虽然相对于ArrayList插入和删除是快速的,但是查找是相对于较慢的,另外还继承了abstractsequentiallist抽象类,他是linkedlist的父类是只支持按次序访问,而不像abstractlist随机访问。

四、LinkedHashSet集合

在这里插入图片描述

  • LinkedHashSet实现类,它是继承HashSet实现类的其实本质上他们两是一样的,但是linkedHashSet在存储数据的时候将顺序也保存了下来,可以按照插入顺序和访问顺序进行迭代,而且它们底层分别靠hashmap和LinkedHashMap去保存数据,往上HashSet的父类为abstractset抽象类,abstractset类又继承了abstractcollection抽象类,它实现了set中绝大部分的函数为set实现类提供了便利,最后是讲一下set接口,它的实现类就是HashSet和linkedHashSet,它是和list接口同级的接口,它和list接口不同的是,他无顺序,不重复,唯一性。

五、TreeSet集合

在这里插入图片描述

  • 集合中TreeSet实现类的依赖图系,它和HashSet实现类还是有很大区别的,我们都知道一说到set接口我们可能就会想到无序,不重复对吧,而且我在讲HashSet的时候也有提到过,但是可以从图中看出来,对他和HashSet都继承了abstractset没问题,但是TreeSet另外实现了一个navigableset接口,这个接口又继承了sortedset接口,而sortedset接口才继承我们的set接口,而HashSet是直接实现set接口类的,而TreeSet实现类最大的特点就是有序性,这我们就不得不提到sortedset接口的原因了,这个接口继承了set接口但是另外他自己又扩展了排序的方法,而这个接口类的子接口类navigableset类在sortedset接口类上实现了进一步扩展,实现了很多关于比较和升倒序的一些方法,所以也就有了TreeSet实现类元素不重复的保证有自然排序和比较器排序。

六、LinkedHashMap集合

在这里插入图片描述

  • 集合map接口下的linkedhashmap,首先他继承了实现类hashmap,实现了map接口类,而hashmap实现类又继承了abstractmap抽象类,实现了标记类cloneable和serializable,map接口特点键值对,键唯一,值不唯一,hashmap特点底层实现为“数组+链表+红黑树”当链表的长度大于8时,转化为红黑树存储,这里简单说一下是头节点是索引位置的节点,链表的头节点,跟节点是最顶级节点,也就是没有父节点的节点,根节点不一定是索引位置的头节点,但是这并不影响红黑树结构和链表结构,希望这里注意,然后是hashmap在遍历的时候其实并不能按照插入的顺序遍历而是随机的,而是他的子类linkedhashmap实现类,扩展了记录插入位置,所以他是有序的,但是同时他和hashmap都是线程不安全的。

七、TreeMap集合

在这里插入图片描述

  • TreeMap实现了serializable接口,cloneable接口和NavigableMap接口,还有就是继承了AbstractMap抽象类,这些就说明TreeMap能够分别说明实现序列化,能够被克隆复制,还有就是能够实现有序的排序和比较大小等等,如果还有什么木有反应过来为什么可以看看我之前写的其他集合,这些还是比较明确的,同时NavigableMap接口继承了SortedMap接口,这个接口才是保证TreeMap是有序的,主要靠这个接口提供,还有这里同时也对应了前面讲的NavigableSet和SortedSet都是依赖NavigableMap和SortedMap。

八、Hashtable,weakhashmap,identityhashmap集合

在这里插入图片描述

  • 首先讲Hashtable它同样是实现了serializable,cloneable,map接口和继承了dictionary抽象类但是这个抽象和map很像而且现在比较过时所以我就不讲了,其他的图一已经将过,然后这个实现类最大的特点就是用哈希表存数据就是可以将关键值码存到表中一个位置,以加快查找速度,weakHashmap两个特点一个是弱引用,二是适用于需要缓存的场景,identifyhashmap最大的特点就是key可以重复,但是不能是同一个对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值