ArraryList、LinkList和Vector的区别

本文对比分析了ArrayList、LinkedList和Vector在源码实现、扩容机制和线程安全方面的差异。ArrayList和Vector实现了RandomAccess接口,适合快速随机访问,而LinkedList实现了Queue接口,适合增删操作。扩容方面,ArrayList按1.5倍扩容,Vector默认按2倍扩容。线程安全上,Vector的方法加锁,适合多线程环境。在性能上,ArrayList适合查找,LinkedList适合增删改。总结来说,查找频繁用ArrayList,修改频繁用LinkedList,线程安全需求选Vector。
摘要由CSDN通过智能技术生成

本文基于 JDK 1.8.0_191

1. 源码对比

  • 实现接口类对比
  • 扩容机制对比
  • 线程安全
1.1 实现接口类对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7kf2zLHb-1623163215546)(https://raw.githubusercontent.com/suiyia/images/master/20190324112747.jpeg?token=ALIF2JNoBZxx5ZeHPivS9QGmNve5iPdbks5clvlwwA%3D%3D)]

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
        
public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable    
    
public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable        
  • 它们都实现 List 接口,说明具备列表的增加、删除、遍历元素等特性。

  • ArrayList、Vector 额外实现 RandomAccess 接口,说明他们能在常量时间复杂度内快速随机访问元素。

  • LinkedList 额外实现 Queue 接口,具备队列的入队、出队等特性。

1.2 扩容机制对比

ArrayList

private static final int DEFAULT_CAPACITY = 10;  // 定义初始大小

private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;  // 定义列表存储元素数量最大值 

private void grow(int minCapacity) {
   
    // overflow-conscious code
    int oldCapacity = elementData.length;   // 现有元素数量 
    int newCapacity = oldCapacity + (oldCapacity 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值