首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java会合工具类之List - Vector & Stack

2012-12-20 
Java集合工具类之List - Vector & Stack?3. List3.1 VectorVector是基本数据结构一个可变数组,数组的元素

Java集合工具类之List - Vector & Stack

?

3. List3.1 Vector

Vector是基本数据结构一个可变数组,数组的元素可以是任意对象,当Vector初始创建时,会创建一个一定容量(Capacity)的(默认为10)数组对象,当添加的对象超过数组的容量时,Vector在内部会重新创建一个新的数组,再把原数组元素拷贝到新的数组里面,这样就完成了动态数组的功能。Vector的构造器有三种

initialCapacity是数组的初始化长度,capacityIncrement是当数组长度超过原长度时,数组长度增长的步长,capacityIncrement为0时,此种情况当数组长度超过原长度峰值时,此时数组长度变为原来的2倍。当数组长度变化,原有的数据和新的数组对象是通过copy来完成的。

Vector默认构造器的数组的长度是10

?

?

核心方法:

/**

???? *

???? * @see #ensureCapacity(int)

???? */

??? 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);

??? }

??? }

1) Vector使用时,最好能够预期需要存放元素的个数,这样可以避免数组长度频繁的改变而引起数据的copy带来的开销,同时会引起内存大小的增加。

2)使用Vector需要知道Vector是线程安全的。因此,在使用时,最好是考虑这个对象会不会因为多个线程访问该Vector对象,如果确认只有单个线程访问,则可以用ArrayList来代替Vector。

?

?

有Vector可以轻松改造成Stack,栈的特点是先进后出,对于一个栈来说,主要方法包括,push(Ee), pop, peek,empty和search(Ee).

public class Stack<E> extends Vector<E> {

???

??? public Stack(){

?????? super(10);

??? }

???

??? public void push(E e){

?????? this.add(e);

??? }

???

??? public E pop(){

?????? return this.remove(this.size()-1);

??? }

???

??? public boolean empty(){

?????? return this.size()==0;

??? }

???

??? public int search(E e){
?? ???? for (int i = 0; i < this.size(); i++) {
?? ???? ??? if(this.elementAt(i).equals(e)){
?? ???? ??? ??? return i;
?? ???? ??? }else{
?? ???? ??? ??? continue;
?? ???? ??? }
?? ???? }
?? ????
?? ???? return -1;
?? ?}

}

热点排行