基本操作示例
創(chuàng)新互聯(lián)公司是專業(yè)的海原網(wǎng)站建設(shè)公司,海原接單;提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行海原網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
VectorApp.java
import java.util.Vector; import java.lang.*; import java.util.Enumeration; public class VectorApp { public static void main(String args[]) { Vector v1 = new Vector(); Integer integer1= new Integer(1); //加入為字符串對象 v1.addElement("one"); //加入的為integer的對象 v1.addElement(integer1); v1.addElement(integer1); v1.addElement("two"); v1.addElement(new Integer(2)); v1.addElement(integer1); v1.addElement(integer1); //轉(zhuǎn)為字符串并打印 System.out.println("The Vector v1 is:\n\t"+v1); //向指定位置插入新對象 v1.insertElement("three",2); v1.insertElement(new Float(3.9),3); System.out.println("The Vector v1(used method insertElementAt()is:\n\t)"+v1); //將指定位置的對象設(shè)置為新的對象 //指定位置后的對象依次往后順延 v1.setElementAt("four",2); System.out.println("The vector v1 cused method setElmentAt()is:\n\t"+v1); v1.removeElement(integer1); //從向量對象v1中刪除對象integer1 //由于存在多個integer1,所以從頭開始。 //找刪除找到的第一個integer1. Enumeration enum = v1.elements(); System.out.println("The vector v1 (used method removeElememt()is"); while(enum.hasMoreElements()) System.out.println(enum.nextElement()+""); System.out.println(); //使用枚舉類(Enumeration)的方法取得向量對象的每個元素。 System.out.println("The position of Object1(top-to-botton):"+v1.indexOf(integer1)); System.out.println("The position of Object1(tottom-to-top):"+v1.lastIndexOf(integer1)); //按不同的方向查找對象integer1所處的位置 v1.setSize(4); System.out.println("The new Vector(resized the vector)is:"+v1); //重新設(shè)置v1的大小,多余的元素被拋棄 } }
運(yùn)行結(jié)果:
E:\java01>java VectorApp The vector v1 is:[one,1,1,two,2,1,1] The vector v1(used method insetElementAt()) is: [one,1,three,3.9,1,two,2,1,1] The vector v1(used method setElementAt()) is: [one,1,four,3.9,1,two,2,1,1] The vector v1(useed method removeElement()) is: one four 3.9 1 two 2 1 1 The position of object1(top-to-botton):3 The position of object1(botton-to-top):7 The new Vector(resized the vector) is: [one,four,3.9,1]
Vertor的1倍擴(kuò)容
還記得ArrayList每次擴(kuò)容為元數(shù)組的0.5倍不?Vector在進(jìn)行擴(kuò)容操作時與ArrayList略微不同
protected int capacityIncrement;//用于指定每次擴(kuò)容的容量 private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);//如不指定capacityIncrement,默認(rèn)擴(kuò)容的容量為原數(shù)組的容量 if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity); }
細(xì)心的小伙伴可以發(fā)現(xiàn)Vector中多了一個capacityIncrement變量,該變量是用于指定每次擴(kuò)容的增量,如果不指定該變量,在grow中可以發(fā)現(xiàn)Vector默認(rèn)就擴(kuò)容為原數(shù)組的1倍
線程安全
Vertor是線程安全的!
Vertor源碼中另一個比較顯眼的地方就是絕大部分方法都有synchronized關(guān)鍵字,大家都知道這個關(guān)鍵字是用于線程同步的,所以Vector類是線程安全的!
但是即使它所有的方法都被修飾成同步,也不意味著調(diào)用它的時候永遠(yuǎn)都不需要同步手段了:
private static Vector<Integer> vector=new Vector<Integer>(); public static void main(String[] args) { while(true) { for(int i=0;i<10;i++) { vector.add(i); } Thread removeThread=new Thread(new Runnable(){ @Override public void run() { for(int i=0;i<vector.size();i++) { vector.remove(i); } } }); Thread printThread=new Thread(new Runnable(){ @Override public void run() { for(int i=0;i<vector.size();i++) { System.out.println(vector.get(i)); } } }); removeThread.start(); printThread.start(); while(Thread.activeCount()>20); } }
大家運(yùn)行此段代碼時 跑了一小段時間之后會發(fā)現(xiàn)有ArrayIndexOutOfBoundsException
異常,這里Vector的get,remove,size
方法盡管有synchronized
修飾,但是在多線程環(huán)境中,如果不在方法端額外做同步措施的話,這段代碼仍然是不安全的,如果一個線程刪除了序號i的元素之后,另一個線程去訪問這個i的話就直接回拋異常,所以保證這段代碼安全還需要再run
里面再添加synchronized
修飾。
希望本篇vector類使用示例文章對您有所幫助
網(wǎng)頁標(biāo)題:Java中的vector類使用方法示例詳解
當(dāng)前地址:http://redsoil1982.com.cn/article48/gschep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站排名、建站公司、自適應(yīng)網(wǎng)站、做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)