Java中向量类的使用方法示例详解

  

<强>,基本操作示例

  

<强> 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中向量类的使用方法示例详解