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工具网来了解。
推荐阅读: