arraylist和vector的区别是什么?主要区别有哪些?java

KLQ 2020-05-21 16:06:54 java常见问答 10928

java当中arraylist和vector的区别你都了解吗?在这两者之间究竟有什么不同呢?下面就让我们一起来做一下详细的了解吧。

一、区别

首先,arraylist和vector这两类都实现List接口。

List接口一共有3个实现类,一个是ArrayList、一个是Vector、一个是LinkedList

List用来存放多个元素,可以维护元素的次序,并且,还允许元素的重复。

下面就重点的来个大家介绍一下arraylist和vector这两个具体实现类的相关区别。

1、ArrayList:

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。

数组的缺点是每个元素之间不可以存在间隔,在数组大小不满足的时候,需要增加存储能力,要将已经有数组的数据复制到新的存储空间当中。

当从ArrayList的中间位置插入或者是删除元素的时候,需要对数组进行复制、移动、代价比较高。

所以说,它适合随机查找和遍历,不适合插入和删除。

2、Vector

Vector和ArrayList相同,都是通过数组实现的,但是,区别就在于Vector支持线程的同步。

也就是一时刻只有一个线程可以写Vector,避免多线程同时写而引起的不一致性,可是,实现同步需要很高的花费,所以,访问它比访问ArrayList慢。

除此之外,arraylist和vector的扩展数组的大小也不同。

arraylist:

public boolean add(E e)
{
    ensureCapacity(size + 1); // 增加元素,判断是否能够容纳。不能的话就要新建数组
    elementData[size++] = e;
    return true;
}
public void ensureCapacity(int minCapacity)
{
    modCount++;
    int oldCapacity = elementData.length;
    if (minCapacity > oldCapacity)
    {
        Object oldData[] = elementData; // 此行没看出来用处,不知道开发者出于什么考虑
        int newCapacity = (oldCapacity * 3) / 2 + 1; // 增加新的数组的大小
        if (newCapacity < minCapacity)
            newCapacity = minCapacity;
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

vector:

private void ensureCapacityHelper(int minCapacity)
{
    int oldCapacity = elementData.length;
    if (minCapacity > oldCapacity)
    {
        Object[] oldData = elementData;
        int newCapacity = (capacityIncrement > 0) ?
            (oldCapacity + capacityIncrement) : (oldCapacity * 2);
        if (newCapacity < minCapacity)
        {
            newCapacity = minCapacity;
        }
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

对于arraylist和vector的区别你都清楚了吗?更多java常见问题,欢迎继续通过奇Q工具网来了解。

推荐阅读:

为什么要复制ArrayList扩容?有何作用?

java继承与组合的区别与联系是什么?详细介绍

ibatis和mybatis的区别是什么?有什么不同?