![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析笔记
❀༊烟花易冷ღ
这个作者很懒,什么都没留下…
展开
-
手写迭代器
以上简单的实现了迭代器常用的功能方法,事实上Iterator是一个接口,我们这里写的迭代器是可以通过构造器实例化的,但是其设计与源码接近。调用第一次next返回的就是集合中第一个元素(下标为0)调用第二次next返回的就是集合中第二个元素(下标为1)当调用到第四次时,下标就越界,于是就报错。方法去判断是否仍有元素可迭代。假如集合存放了三个元素。...原创 2022-07-30 15:07:39 · 168 阅读 · 0 评论 -
集合框架的总结
对于Map实现类HashMap是基于数组+链表+红黑树实现。而HashTable在此基础上多线程安全。对于List实现类ArrayList是基于数组实现,LinkedList是基于链表数据结构实现。对于Set实现类HashSet不允许重复数据,基于Map集合实现。Colletion是单列,Map是双列。List可重复,Set不可重复。.........原创 2022-07-30 14:20:00 · 99 阅读 · 0 评论 -
ArrayList的特性
ArrayList底层是封装了一个elementData数组,本质上通过数组来实现,当我们newArrayList时,以懒加载的形式(没有初始化容量),只有当我们使用它的比如add方法的时候,才会初始化容量。在此基础上,当添加的元素不够数组的长度,触发动态扩容机制,将原数组扩容成1.5倍(底层还是通过copyOf方法(从0开始覆盖,覆盖到长度为新的容量为止)实现elementData数组的初始化。ArrayList基于index下标查询效率高,因为可以直接通过下标定位然后返回,它的API是get方法。它的时原创 2022-07-30 12:12:11 · 268 阅读 · 0 评论 -
ArrayList源码分析
实际上,在add方法里,实际的插入数据操作之前,只是做了扩容操作,和对elementData数组的初始化。以上是add第一个元素的源码刨析。add第二个元素乃至add第十个元素,其中容量都是10。elementData数组长度会逐一增加。当ArrayList添加到第十个元素的时候,刚好装满,其中elementData数组长度和初始容量相等,至此,没有发生扩容,全部装满。。。当添加到第十一个元素的时候,elementData数组长度(11)小于初始容量10,即容量不能容纳下,于是发生扩容,如.原创 2022-07-28 22:57:15 · 85 阅读 · 0 评论