标签:
一天一个类,一点也不累。
今天要说的是ArrayList的亲兄弟--Vector
亲兄弟?看看“族谱”
Class Vector<E> java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.Vector<E> All Implemented Interfaces: Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess Direct Known Subclasses: Stack public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
发现 他们俩就是亲兄弟啊~~
The Vector
class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of a Vector
can grow or shrink as needed to accommodate adding and removing items after the Vector
has been create。
Vecotor 实现了可变的数组,和数组一样,提供了使用下标来访问对象。Vector创建之后,可以按照需求来增加或者收缩。
Each vector tries to optimize storage management by maintaining a capacity
and a capacityIncrement
.
使用capacity 和 capacityIncrecement实现存储空间的管理。capacity
容量,capacityIncrement 增长步
长
1、他的构造方法有三种,
Vector()
默认的大小为10
Vector(Collection<? extends E> c)同样使用数组工具类Arrays的copyOf()
Vector(int initialCapacity, int capacityIncrement)
同时指定了容器的容量和增长步长。
2、实现了从Vector到数组的转换
copyInto(Object[] anArray);
3、一个很有情怀的方法
在构造函数中,我们有些时候,初始化容量的时候,会有很多剩余空间没被使用,这样的话,就浪费了(浪费可耻!!~)
给我们提供了一个方法,trimToSize()将容量的值,设置为当前容器的size.
其中的实现:
public synchronized void trimToSize() { modCount++; int oldCapacity = elementData.length; if (elementCount < oldCapacity) { elementData = Arrays.copyOf(elementData, elementCount); }
可见他也是使用Arrays.copyOf(),需要将数据拷贝一次。所以也是很消耗时间的。
4、在这里我们也许要着重说一下Vector的增长方式
首先呢,在构造的时候我们可以指定,capacityIncrement
;如果没有指定也可以后期使用函数来指定,
public synchronized void ensureCapacity(int minCapacity) //指定最小的增长;
其实这个Vector可以自动增长的,
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity); //【如果没有指定capacityIncrement,那么newCapacity = oldCapacity+oldCapacity;就是二倍增长!!!】
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
这里就是讲这么多了,其实这个类还有好多的方法,这些方法和上次讲的ArrayList()种的方法是一样的使用,可以自行查看。
【重要】虽说好些方法和ArrayList()使用方法是一样的,但是大家可能发现了,这个类种几乎所有的方法都是synchronized同步的!!
这就是说相比ArrayList()这个是线程安全的。
【谢谢大家,欢迎指正。】
【转载请注明出处http://home.cnblogs.com/u/plxx/】
标签:
原文地址:http://www.cnblogs.com/plxx/p/4442484.html