栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LinkedList Vector基本源码分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LinkedList Vector基本源码分析

Vector

底层是对象数组
线程同步,线程安全
无参构造,默认为10,满了后,按照2倍扩容
指定大小,满了后,直接按照两倍扩容

1.无参构造的时候:

这里看到,无参构造默认空间为10

2.执行add方法的时候

这里说一下:synchronized是保证线程安全的
ensureCapacityHelper:
这个方法判断是不是要扩容;
第一次执行的时候minCapacity=1;(0+1)

3.我们看一下这个方法的源码:

elementData.length为10.(无参构造,默认为10)
1<10; 现在够用,所以不用扩容

4.当执行了10次以后(因为默认先给10个空间),就要执行扩容方法了

重点:
下面代码就是扩容的本质了;相当与
新的空间=旧的空间*2;

LnkedList

1.底层实现了双向链表和双端队列特点
2.可以添加任意元包括null
3.线程不安全,没有实现同步

底层操作机制
1.底层维护了一个双向链表
2.维护了两个属性first last分别指向首结点和尾结点
3.每个结点(Node对象)里面维护了prev、next、item三个属性
4.LinkedList添加删除快,不是通过数组完成的,相对来说效率高

LinkedList l = new LinkedList<>();
l.add(1);
l.add(2);
System.out.println(l);
 

1.无参构造

linkList的属性first=null,last=null

2.add(1)的时候

执行linkLast(e)
将e插入链表尾部

4.执行add(2)
将2插入了尾部

ArrayList和LinkedList的选择

ArrayList: 改查多
LinkedList:增删多
一般来说,很多都是查询,因此,大部分都是ArrayList

其他源码自己分析吧,没什么难的,就是双链表的增删改查获得元素数啥的。
曾经很少分析源码,主要源于恐惧,看见源码这么长就头大。但是只要一步一步分析,认真去看,多看几遍,收获还是非常大的。不仅让你会用,还能让你知道原理。不禁让我想起了学长的一句话:源码面前,没有秘密

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号