【JAVA】【集合8】Java中的Vector


【集合】Java中的Vector

參考:

https://www.cnblogs.com/zheting/p/7708366.html

https://blog.csdn.net/w15971597/article/details/48937701

https://www.cnblogs.com/xiaostudy/p/9526270.html

一、Vector的用途

Vector是java.util.vector提供的向量類,以實現類似動態數組的功能。

Vector可擁有時下自動增長的對象數組。

創建了一個向量類的對象后,可以往其中隨意插入不同類的對象,即不需顧及類型、也不需預先選定向量的容量,並可以方便地進行查找。

對於預先不知或者不願預先定義數組大小,並且需要頻繁地進行查找,插入,刪除工作的情況,可以考慮使用向量類。

Vector類中主要成員字段如下:

  • elementData:是一個Object類型的數組索引,在構造方法中會通過new方式、或toArray()方式創建存儲空間。在向Vertor中添加對象過程中,如果存儲空間滿,會自動擴充空間。
  • elementCount:記錄當前Vector中實際保存的對象個數。size()方法返回的就是本字段值。
  • capacityIncrement:當Vector中存儲空間占用完畢后,通過本參數指定每次擴充的擴充量。當capacityincrement為0的時候,則每次擴充一倍。
public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    protected Object[] elementData;

    protected int elementCount;

    protected int capacityIncrement;
}

二、Vector的構造方法

Vector提供了三種構造方法:

public vector() 
public vector(int initialcapacity,int capacityIncrement) 
public vector(int initialcapacity)
  1. 構造方法1:系統會自動對向量進行管理。
  2. 構造方法2、構造方法3:則系統將根據參數設置關聯向量:
    • initialcapacity設定向量對象的容量(即向量對象可存儲數據的大小),當真正存放的數據個數超過容量時。系統會擴充向量對象存儲容量。
    • capacityincrement給定了每次擴充的擴充值。當capacityincrement為0的時候,則每次擴充一倍,利用這個功能可以優化存儲。

三、Vector的插入方法

1. 向Vector的尾部插入對象

public synchronized boolean add(E e)
public synchronized void addElement(E obj) 

將obj插入向量的尾部。obj可以是任何類型的對象。對同一個向量對象,亦可以在其中插入不同類的對象。但插入的應是對象而不是數值,所以插入數值時要注意將數組轉換成相應的對象

樣例:向Vector中插入Integer對象

Vector v1 = new Vector(); 
Integer integer1 = new Integer(1); 
v1.addElement(integer1); 

2. 替換Vector中指定索引的對象

public synchronized void setElementAt(E obj, int index) 

將index處的對象設置成obj,原來的對象將被覆蓋。

3. 在Vector指定位置插入對象

public synchronized void insertElementAt(E obj, int index) 

在index指定的位置插入obj,原來對象以及此后的對象依次往后順延。

4.把一個集合整體添加到Vector中

public synchronized boolean addAll(Collection<? extends E> c)

樣例:

Vector vector1 = new Vector();
Vector vector2 = new Vector();

vector1.addElement("demo1");	
vector1.addElement("demo2");	
vector1.addElement("demo3");	
vector1.addElement("demo4");

vector2.addAll(vector1);

四、查詢Vector中對象個數

public final int size(); 

此方法用於獲取向量元素的個數。它們返回值是向量中實際存在的元素個數,而非向量容量。可以調用方法capacity()來獲取容量值。

五、在Vector中搜索對象

1. 獲取Vector中第一個對象

public synchornized E firstElement() 

獲取向量中的首個obj 。

2. 獲取Vector中最后一個對象

public synchornized E lastElement() 

獲取向量中的最后一個obj 。

3. 指定索引,獲取對象

public synchronized E elementAt(int index)

獲取向量中指定位置的obj 。

4. 從頭搜索指定對象,返回對象所在位置索引

public int indexOf(E obj) 

從向量頭開始搜索obj,返回所遇到的第一個obj對應的下標。若不存在此obj,返回-1。

5. 從指定索引位置開始正向搜索指定對象,返回對象所在位置索引

public synchronized int indexOf(E obj, int index) 

從index所表示的下標處開始搜索obj,返回所遇到的第一個obj對應的下標。若不存在此obj,返回-1。

6. 從尾搜索指定對象,返回對象所在位置索引

public int lastindexOf(E obj) 

從向量尾開始搜索obj,返回所遇到的第一個obj對應的下標。若不存在此obj,返回-1。

7. 從指定索引位置開始逆向搜索指定對象,返回對象所在位置索引

public synchornized int lastIndexOf(E obj, int index) 

從index所表示的下標處由尾至頭逆向搜索obj,返回所遇到的第一個obj對應的下標。若不存在此obj,返回-1。

七、從Vector中刪除對象

1. 刪除Vector所有對象

public synchronized void removeAllElement(); 

刪除向量所有的對象。

2. 指定索引刪除對象

public synchronized void removeElementAt(int index) 

刪除index所指的地方的對象。

3. 指定索引范圍,刪除對象

protected synchronized void removeRange(int fromIndex, int toIndex) 

3. 指定對象,從首次出現的位置刪除

public synchronized void removeElement(E obj)

從向量中刪除obj對象。若有多個存在,則從向量頭開始,刪除找到的第一個與obj相同的向量成員。

八、遍歷Vector中對象

Vector的elements()方法創建一個匿名類對象,此類包含hasMoreElements()和nextElement()方法,如下:

    public Enumeration<E> elements() {
        return new Enumeration<E>() {
            int count = 0;

            public boolean hasMoreElements() {
                return count < elementCount;
            }

            public E nextElement() {
                synchronized (Vector.this) {
                    if (count < elementCount) {
                        return elementData(count++);
                    }
                }
                throw new NoSuchElementException("Vector Enumeration");
            }
        };
    }

Enumeration定義:

public interface Enumeration<E> {
    boolean hasMoreElements();

    E nextElement();
}

使用樣例:

import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

public class TestVector {
    public void test01() {
        Vector<String> hs = new Vector<String>();
        hs.add("aa");
        hs.add("bb");
        hs.add("aa");
        hs.add("cc");
        hs.add("aa");
        hs.add("dd");
        printSet2(hs);
    }

    public void printSet2(Vector<String> hs) {
        Enumeration<String> elements = hs.elements();
        while (elements.hasMoreElements()) {
            System.out.println(elements.nextElement());
        }
    }

    public static void main(String[] args) {
        new TestVector().test01();
    }
}

九、其他方法

1. 設置Vector新Size,超過部分丟棄

public synchronized void setSize(int newsize); 

此方法用來定義向量的大小,若向量對象現有成員個數已經超過了newsize的值,則超過部分的多余元素丟棄。

2. Vector判空

public synchronized boolean isEmpty()

3. 把向量元素復制到數組中

public synchronized void copyInto(Object[] anArray) {
        System.arraycopy(elementData, 0, anArray, 0, elementCount);
}

十、使用Vector創建二維數組

定義樣例:

        List intList1 = Arrays.asList(1,4,7,11,15);
        List intList2 = Arrays.asList(2,5,8,12,19);
        List intList3 = Arrays.asList(3,6,9,16,22);
        List intList4 = Arrays.asList(10,13,14,17,24);
        List intList5 = Arrays.asList(18,21,23,26,30);

        Vector<Integer>  v1 = new Vector();
        v1.addAll(intList1);

        Vector<Integer>  v2 = new Vector();
        v2.addAll(intList2);

        Vector<Integer>  v3 = new Vector();
        v3.addAll(intList3);

        Vector<Integer>  v4 = new Vector();
        v4.addAll(intList4);

        Vector<Integer>  v5 = new Vector();
        v5.addAll(intList5);

        //創建Vector,每個單元保存的是Vector對象
        Vector<Vector<Integer> > matrix =  new Vector();   
        matrix.addElement(v1);
        matrix.addElement(v2);
        matrix.addElement(v3);
        matrix.addElement(v4);
        matrix.addElement(v5);

        for(int i = 0; i < matrix.size(); i++) {     //matrix.size()是3
            for(int j = 0; j < matrix.elementAt(i).size(); j++) {   //每個二維Vector的size()是5
                System.out.print(matrix.elementAt(i).elementAt(j) + "\n");
            }
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM