Java中Vector向量的用法

Java中的向量实际就是一个动态的可自动扩容的数组

1、向量中的元素必须是引用型的变量,而且可以进行增删改等多种操作

2、同样有向量的容量和向量的长度两个属性,当新的长度超过容量时,程序会自动扩容

   此外,还有一个属性是 容量的增量 , 容量的增量的设定控制着扩容的规则,当需要进行

   扩容时,则从下面两个数值中选取教的一个进行扩容:

    ① 第一个数是向量对象的新的长度

    ② 第二个数根据增量来确定:

       <1>如果增量为 0 , 则第二个数为旧的容量的2倍

       <2>如果增量不为0 ,则第二个数为旧容量与增量之和

3、向量引用型变量的声明

    Vector<向量元素的数据类型>变量名

   如: Vector<String> vs

4、向量实例对象的创建方法——通过构造方法

    ① public Vector() 默认容量为10,增量为0

    ② public Vector(int initialCapacity) 容量为initialCapacity,增量为0

    ③ public Vector(int initialCapacity , int capacityIncrement)

   注意在创建对象调用构造方法的形式如下:

      Vector<String> vs = new Vector<String>() ;

5、对向量实例对象的操作方法(E代表元素的数据类型)

   <1> 增加与插入

       ① public boolean add(E obj)               

           public void addElementA(E obj)

          都是在向量的尾部增加元素

       ② public void add(int index , E obj)

          public void insertElementAt(E obj , int index)

          都是在指定的位置插入新的元素

   <2> 修改于删除

       ① public E set(int index , E element)

          public void setElementAt(E obj, int index)

          都是指定位置的元素的修改,其中第一个方法返回旧的被修改元素的引用

       ② public void clear()

          public void removeAllElements()

          删除向量中的所有的元素          

      ③ public E remove(int index)

          public void removeElementAt(int index)

          删除指定位置的元素

       ④ public boolean remove(Object obj)

          public boolean removeElement(Object obj)

          值得注意的是:这两个方法都必须要判定指定的obj对象是否在当前的向量中,而如

          何判定两个对象是否“相等”呢?这两个方法都会自动调用向量元素继承自Object类

          的public boolean equals(Object obj)方法,来判定是否有要删除指定的对象,这

          就出现了一个问题:

          在Object类中的equals(Object obj)方法,只有当两个引用型变量同时指向同一

          个对象时,才会返回true,但实际remove()方法往往要求当两个引用型变量指向的

          对象具有相同的内容时,就要进行删除操作,所以一般要在向量的元素的类中对继承             

          的equals进行重写,至于equals方法的重写,在之前已经说过了          

   <3>信息的查询操作

       ① public boolean contains(Object obj)

          判定obj是否在当前的向量对象中,同样需要调用equals()方法    

       ② public int indexOf(Object obj)

          返回第一个与obj相等的向量中的元素的索引

          public int lastIndexOf(Object obj)

          返回最后一个与obj相等的向量中的元素的索引                

       ③ public E elementAt(int index)

          public E get(int index)

          都会返回下标为index的向量中的元素

       ④ public E firstElement()  返回下标为0 的元素

          public E lastElement()   返回最后一个元素               

       ⑤ public int capacity()  返回向量的当前的容量                 

           public int size()      返回向量的当前的长度            

           public boolean isEmpty() 判定当前的向量对象是否为空

       ⑥ public void setSize(int newSize)

          设定向量的长度,要么删除一部分元素,要么用null补充,如果需要扩大容量的             

          话,会自动扩容

       ⑦ public void ensureCapacity(int minimum)

          设定向量的容量,扩容规则与上述规定相同  

       ⑧ public void trimToSize()

          使向量的容量正好等于向量的常度     

6、获取向量中的各个元素还可以通过迭代器(iterator)来实现

     类java.util.Vector有一个成员方法

       public Iterator<E> iterator()

     该方法会返回当前的向量对象所对应的迭代器,返回类型为Iterator<E>类型,

     Iterator类位于java.util.Iterator,所以要用迭代器的话就必须引入该类

     在获得了向量所对应的迭代器后,就可以通过这个迭代器来对各个元素进行操作了

     java.util.Iterator类有两个重要的成员方法:

     ① public boolean hasNext()  判定迭代器中是否还有元素

     ② public E next()           返回迭代器当前位置的下一位置的元素,之后当前位置

                                  向下移动一个位置     

     ③ public void remove()     

        从迭代器指向的容器当中删除迭代器返回的最后一个元素,所以在调用该方法前,至少调用了

        一次next()方法,也就是说remove()方法不能够连续调用

     【在迭代器被创建完成之后,其当前位置就自动的指向序列的第一个元素的前一个位置

       hasNext()用来判定当前位置的下一个位置是否还有元素

       在多次调用next()方法后,当前位置的下一个位置就会不在有元素了,

       而且当前位置是不能回到最初位置的,这时再调用next()方法就会报错

       所以说一般迭代器只能从头到尾用一次】             如:

        String str1 = "123" ;

        String str2 = "456" ;

        Vector<String> vs = new Vector<String>(2) ;

        vs.add(str1) ;

        vs.add(str2) ;

        Iterator<String> it = vs.iterator() ;

        while(it.hasNext())

          System.out.println(it.next());

posted @ 2014-08-10 10:20  RoperLee  阅读(2602)  评论(0)    收藏  举报