ArrayList&Vector

本文详细探讨了ArrayList和Vector在Java中的实现原理,包括它们的关键属性elementData和size,以及add()和add(index, e)方法的具体操作流程。此外,还对比了ArrayList与Vector在同步机制上的不同。

最重要的两个属性分别是: elementData 数组,以及 size 大小。

 add() 方法的时候:

首先进行扩容校验。

将插入的值放到尾部,并将 size + 1

 

调用 add(index,e)方法的时候:

也是首先扩容校验。

接着对数据进行复制,目的是把 index 位置空出来放本次插入的数据,并将后面的数据向后移动一个位置

 

由于 ArrayList 是基于动态数组实现的,所以并不是所有的空间都被使用。因此使用了 transient 修饰,可以防止被自动序列化。

自定义了序列化与反序列化(当对象中自定义了 writeObject 和 readObject 方法时,JVM 会调用这两个自定义方法来实现序列化与反序列化。)

 

Vector是arrayList的同步版本,add() 方法的时候使用 synchronized 进行同步写数据

转载于:https://my.oschina.net/u/1992157/blog/3008656

ArrayListVector主要区别为以下几点: 1. **线程安全性**:Vector是线程安全的,源码中有很多的`synchronized`,而ArrayList不是线程安全的。这导致Vector效率无法和ArrayList相比,若只有一个线程访问集合,最好使用ArrayList,因其不考虑线程安全,效率更高;若有多个线程访问集合,最好使用Vector,无需再编写线程安全的代码[^1][^3]。 2. **存储空间增长策略**:ArrayListVector都采用线性连续存储空间,当存储空间不足时,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍[^1]。 3. **容量增长参数设置**:Vector可以设置`capacityIncrement`,从字面理解就是容量增长的参数,而ArrayList不可以[^1]。 4. **实现与特性**:ArrayListVector都实现了`iterator`和`List`接口,并且底层都是基于数组方式实现,具备数组的特点,可根据下标查找数据,查询快,但插入和删除时需要遍历,速度慢[^2]。 以下是简单的代码示例,展示ArrayListVector的基本使用: ```java import java.util.ArrayList; import java.util.Vector; public class ListExample { public static void main(String[] args) { // 使用ArrayList ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("element1"); arrayList.add("element2"); System.out.println("ArrayList: " + arrayList); // 使用Vector Vector<String> vector = new Vector<>(); vector.add("element1"); vector.add("element2"); System.out.println("Vector: " + vector); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值