List接口的实现

博客围绕Java的List集合展开。介绍了ArrayList线程不安全,生产中常用CopyAndWriteArrayList等替代;阐述了List接口下ArrayList、Vector、LinkedList的继承关系及特点,如ArrayList查找快、增删慢,LinkedList适合动态插入删除;还对ArrayList和LinkedList进行了对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ArrayList是线程安全的吗?


     不安全,Vector是线程安全的,但是生产环境已经不用了。目前使用CopyAndWriteArrayList 和 Collections.synchronizedList(List<T> list)  


2.List接口的继承关系

 


ArrayList:底层是动态数组、查找快,增删慢,默认初始容量是10、每次采用1.5倍的容量扩容(在内存有一块连续的空间,只要有内存下标地址可以马上定位到数据);

Vector:和ArrayList一样的,不同的是Vector是线程同步的;

LinkedList:采用的是双向链表结构存储数据,适用于动态地插入和删除,但是随机访问和遍历的效率比较慢,(因为它是要从头节点一个一个的去执行),除此之外还有Deque接口因此还有队列的特性jdkl1.6版本之前支持循环双向链表结构,1.7以后的版本取消了循环结构图标如下图所示:(双向链表:出去头尾两个节点中的其余任意一个节点都可以定位到前后两个节点;循环双向链表:把头部的前节点prev指向最后一个节点;把最后一个节点的后节点next指向头部节点;双向链表的主要优点: 对于任意给的结点,都可以很轻易的获取其前结点和后结点。
其主要缺点:每个结点需要保存next和prev两个属性,因此需要更多的空间开销,同时结点的插入与删除操作也将更加耗时,因为需要操作更多的指向操作。
) 



3.ArrayList和linkedList的对比

 




 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值