JAVA中的List、Vector、ArrayList的差异

本文探讨了JAVA中LinkedList、Vector和ArrayList的性能差异。ArrayList和Vector使用Object数组实现,线程安全性是两者的主要区别。LinkedList通过双向链表实现,适合大量插入删除操作。对于线程安全的需求,直接使用Vector或对LinkedList进行同步封装,但后者性能较低。在多数情况下,ArrayList/Vector的性能优于LinkedList。
摘要由CSDN通过智能技术生成

JAVA中的LinkedList、Vector、ArrayList的差异

SDK提供了有序集合接口java.util.List的几种实现,其中三种最为人们熟知的是Vector、ArrayList和LinkedList。有关这些List类的性能差别是一个经常被问及的问题。在这篇文章中,我要探讨的就是LinkedList、Vector、ArrayList之间的性能差异。为全面分析这些类之间的性能差异,我们必须知道它们的实现方法。因此,接下来我首先从性能的角度出发,简要介绍这些类的实现特点。

一、Vector和ArrayList的实现

Vector和ArrayList都带有一个底层的Object[]数组,这个Object[]数组用来保存元素。通过索引访问元素时,只需简单地通过索引访问内部数组的元素:

public Object get(int index)
{
    //首先检查index是否合法...此处不显示这部分代码 
	return elementData[index]; 
} 

内部数组可以大于Vector/ArrayList对象拥有元素的数量,两者的差值作为剩余空间,以便实现快速添加新元素。有了剩余空间,添加元素变得非常简单,只需把新的元素保存到内部数组中的一个空余的位置,然后为新的空余位置增加索引值:

public boolean add(Object o)
{
    
 	ensureCapacity(size + 1); //稍后介绍 elementData[size++] = o;
 	return true;//List.add(Object) 的返回值 
 }

把元素插入集合中任意指定的位置(而不是集合的末尾)略微复杂一点:插入点之上的所有数组元素都必须向前移动一个位置,然后才能进行赋值:

public void add(int index, Object element) {
   
//首先检查index是否合法...此处不显示这部分代码
	ensureCapa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值