Java集合之Vector
首先上图:
Vector
类实现可增长的对象数组,同ArrayList一样都是采用数组存储数据。Vector通过维护 capacity
和 capacityIncrement
来优化存储管理,capacity
值始终至少应与向量的size相等,当往Vector中添加的元素个数要大于capacity时,Vector将按capacityIncrement的大小增加存储块。与ArrayList不同的是,Vector由于使用了synchronized方法,所以线程安全,性能上也比ArrayList差。下面是Vector的一些常用方法:
package practice;
import java.util.Vector;
import java.util.Iterator;
import java.util.ListIterator;
/**
* Vector和ArrayList同样都采用了数组存储数据
* 所以查询元素快,插入删除慢
* 两者不同的时Vector采用同步方法,线程安全,但是效率
* 比ArrayList要差
* @author tiny_spot
*/
public class VectorPractice {
public static void main(String args[]) {
Vector v = new Vector();//构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
System.out.println("vector的容量为:"+v.capacity());
v.add("abcdef");
v.add(25);
v.add(0, 3.5f);
for(int i = 0 ; i < v.size(); i++)//for循环遍历
System.out.print(v.get(i)+" ");
System.out.println();
for(int i = 0 ; i < 10; i++)
v.add(i);
for(Object o : v)//foreach循环遍历
System.out.print(o+" ");
System.out.println("\nvector的容量为:"+v.capacity());//20,说明超过之前的容量时会自动增加
v.remove(4);//删除指定索引处的元素
v.remove((Object)4);//移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变。
Iterator it = v.iterator();
while(it.hasNext())//iterator迭代
System.out.print(it.next()+" ");
System.out.println();
v.removeElementAt(0);//如果怕remove()方法产生歧义,可以使用此函数删除指定位置的元素
v.removeElement(0);//从此向量中该元素的第一个(索引最小的)匹配项。避免remove方法产生歧义
ListIterator lit = v.listIterator(0);
while(lit.hasNext())//ListIterator迭代
System.out.print(lit.next()+" ");
System.out.println();
System.out.println("25第一次出现的索引:"+v.indexOf((Object)25));//若没有该元素,返回-1
v.set(5, (Object)25);//用指定的元素替换此向量中指定位置处的元素。
System.out.println("25最后一次出现的索引:"+v.lastIndexOf((Object)25));
for(Object o : v)
System.out.print(o+" ");
System.out.println();
lit = v.listIterator(3);
System.out.print("从第3号元素开始往前遍历:");
while(lit.hasPrevious())
System.out.print(lit.previous()+" ");
System.out.println();
lit = v.listIterator(3);
System.out.print("从第3号元素开始往后遍历:");
while(lit.hasNext())
System.out.print(lit.next()+" ");
}
}
运行结果:
vector的容量为:10
3.5 abcdef 25
3.5 abcdef 25 0 1 2 3 4 5 6 7 8 9
vector的容量为:20
3.5 abcdef 25 0 2 3 5 6 7 8 9
abcdef 25 2 3 5 6 7 8 9
25第一次出现的索引:1
25最后一次出现的索引:5
abcdef 25 2 3 5 25 7 8 9
从第3号元素开始往前遍历:2 25 abcdef
从第3号元素开始往后遍历:3 5 25 7 8 9