<强>,基本操作示例强>
<强> VectorApp.java 强>
进口java.util.Vector; 进口. lang . *; 进口活动; 公开课VectorApp { 公共静态void main (String参数[]) { 矢量v1=new (); 整数integer1=new整数(1);//加入为字符串对象 v1.addElement(“一”);//加入的为整数的对象 v1.addElement (integer1); v1.addElement (integer1); v1.addElement(“两个”); v1。addElement(新的整数(2)); v1.addElement (integer1); v1.addElement (integer1);//转为字符串并打印 system . out。println (“v1: \ n \ t”+ v1);//向指定位置插入新对象 v1.insertElement(“三”,2); v1。insertElement(新的浮动(3.9),3); system . out。println (“v1(使用方法 insertElementAt (): \ n \ t)”+ v1);//将指定位置的对象设置为新的对象//指定位置后的对象依次往后顺延 v1.setElementAt(“四”,2); system . out。println (“v1 cus方法setElmentAt (): \ n \ t”+ v1); v1.removeElement (integer1);//从向量对象v1中删除对象integer1//由于存在多个integer1,所以从头开始。//找删除找到的第一个integer1。 枚举enum=v1.elements (); system . out。println (“v1(使用方法removeElememt () "); 而(enum.hasMoreElements ()) System.out.println (enum.nextElement () + " "); System.out.println ();//使用枚举类(枚举)的方法取得向量对象的每个元素。 system . out。println(“的位置中的Object1 (top-to-botton):”+ v1.indexOf (integer1)); system . out。println(“的位置中的Object1 (tottom-to-top):”+ v1.lastIndexOf (integer1));//按不同的方向查找对象integer1所处的位置 v1.setSize (4); system . out。println(“新向量(矢量大小):”+ v1);//重新设置v1的大小,多余的元素被抛弃 } }
<>强运行结果:强>
E: \ java01> java VectorApp v1是:(1、1、1、2、2、1、1] v1(使用方法insetElementAt())是: (1、1、3、3.9、1、2、2、1、1] v1(使用方法setElementAt())是: (1、1、4、3.9、1、2、2、1、1] v1(优世德方法removeElement())是: 一个4 3.9 - 1 2 2 1 1 的位置中的object1 (top-to-botton): 3 的位置中的object1 (botton-to-top): 7 新的向量(矢量大小): (1、4、3.9、1)
<强> Vertor的1倍扩容强>
还记得ArrayList每次扩容为元数组的0.5倍不?向量在进行扩容操作时与ArrayList略微不同
保护int capacityIncrement;//用于指定每次扩容的容量 私人空间增长(int minCapacity) {//overflow-conscious代码 int oldCapacity=elementData.length; int newCapacity=oldCapacity + (capacityIncrement祝辞0)& # 63; capacityIncrement: oldCapacity);//如不指定capacityIncrement,默认扩容的容量为原数组的容量 如果(newCapacity - minCapacity & lt;0) newCapacity=minCapacity; 如果(newCapacity - MAX_ARRAY_SIZE祝辞0) newCapacity=hugeCapacity (minCapacity); elementData=https://www.yisu.com/zixun/Arrays.copyOf (elementData newCapacity); }
细心的小伙伴可以发现向量中多了一个capacityIncrement变量,该变量是用于指定每次扩容的增量,如果不指定该变量,在成长中可以发现向量默认就扩容为原数组的1倍
<强>线程安全强>
<强> Vertor是线程安全的! 强>
Vertor源码中另一个比较显眼的地方就是绝大部分方法都有同步关键字,大家都知道这个关键字是用于线程同步的,所以向量类是线程安全的!
但是即使它所有的方法都被修饰成同步,也不意味着调用它的时候永远都不需要同步手段了:
私有静态Vector向量=new Vector (); 公共静态void main (String [] args) { 而(真) { (int i=0; i<10;我+ +) { vector.add(我); } 线程removeThread=新线程(新Runnable () { @Override 公共空间run () { for (int i=0; i< vector.size();我+ +) { vector.remove(我); } } }); 线程printThread=新线程(新Runnable () { @Override 公共空间run () { for (int i=0; i< vector.size();我+ +) { System.out.println (vector.get (i)); } } }); removeThread.start (); printThread.start (); 而(Thread.activeCount()在20); } } Java中向量类的使用方法示例详解