JDK集合源码
文章平均质量分 75
学习笔记
kaico2018
喜欢是一种动力,兴趣是一位老师。
展开
-
HashMap 和 HashSet 源码分析
HashMap 简单介绍 1、HashMap和 HashTable的区别? HashMap 线程不安全,HashTable 线程安全。 2、Map 接口中Node对象的作用 Node类的源码,采用链表数据结构,因为 key的 hashcode可能存在相同但是key不相同的情况,hahscode相同的key都存在一个链表数据结构上,再通过equals 比较值。 就是为了解决hashcode冲突问题。 Node 表示存放在HashMap 中的一条键值对,主要用来存储Map集合的元素。 hashcode 和equ原创 2022-03-16 17:46:51 · 1042 阅读 · 0 评论 -
LinkedList 源码分析
LinkedList 底层链表结构分析 数组与链表数据结构区别 在数组中存放一种相同的元素按照一定的顺序存放;数组的存储空间是连续,占用内存比较大,所以它的发杂度空间很大;但是数组的查询效率非常高,故二分时间复杂度小。 算法的时间复杂度和空间复杂度: 算法的时间复杂度指的就是一个算法执行所耗费的时间0(1) 算法的空间复杂度指的就是一个算法的空间复杂度(SpaceComplexity)S(n)定义为该算法所耗费的存储空间 所以:数组查询效率比较高、但是增删效率比较低,链表数据结构查询效率比较低,但是增删效率原创 2022-03-10 19:28:18 · 284 阅读 · 0 评论 -
ArrayList 和 Vector 源码分析
ArrayList构造函数源码分析 源码如下图: 在集合初始化时,如果执行的是没有参数的构造函数,则集合对象中的数组默认是空数组,数组长度为0。 ArrayList添加方法源码分析 直接添加元素方法:默认添加到集合(数组)最后位置 扩容源码分析: 什么时候需要扩容,见上图,添加方法中判断的(如果当前数组数据数量等于数组的大小,就扩容)。 扩容算法(方法分析)︰ 数组的默认扩容大小,在原来的基础上增加一半 使用Arrays.copyof();方法对数组进行扩容,将数组以前的旧数据复制到新的数组中。 扩容的原创 2022-03-10 19:19:07 · 134 阅读 · 0 评论