五:Java之Vector类专题

据说期末考试要考到Vector 这个类,出于复习需要在这里就要好好整理下这个类了。

一、基本概念

Vector 是可实现自动增长的对象数组。

java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。

创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。

Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List,RandomAccess, Cloneable这些接口。

Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。

Vector 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。

Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。

和ArrayList不同,Vector中的操作是线程安全的。

二、向量类的构成

Vector共有4个构造函数

// 默认构造函数

1、Vector()

// capacity是Vector的默认容量大小。当由于增加数据导致容量增加时,每次容量会增加一倍。

2、Vector(int capacity)

// capacity是Vector的默认容量大小,capacityIncrement是每次Vector容量增加时的增量值。

3、Vector(int capacity, int capacityIncrement)

// 创建一个包含collection的Vector

4、Vector(Collection<? extends E> collection)

三个成员变量

Vector的数据结构和ArrayList差不多,它包含了3个成员变量:elementData , elementCount, capacityIncrement。

(1) elementData 是"Object[]类型的数组",它保存了添加到Vector中的元素。elementData是个动态数组,如果初始化Vector时,没指定动态数组的>大小,则使用默认大小10。随着Vector中元素的增加,Vector的容量也会动态增长,capacityIncrement是与容量增长相关的增长系数。

(2) elementCount 是动态数组的实际大小。

(3)capacityIncrement 是动态数组的增长系数。如果在创建Vector时,指定了capacityIncrement的大小;则,每次当Vector中动态数组容量增加时>,增加的大小都是capacityIncrement。

三、所有方法及其描述

1  void add(intindex, Object element)

插入在此向量的指定位置插入指定的元素。

2  booleanadd(Object o)

将指定的元素添加到此向量的末尾。

3  booleanaddAll(Collection c)

所有追加在指定集合的元素添加到此向量的末尾,因为它们是由指定集合的??迭代器返回的顺序。

4  booleanaddAll(int index, Collection c)

插入所有在指定Collection中的元素到此向量的指定位置。

5  voidaddElement(Object obj)

指定的组件添加到此向量的末尾,将其大小增加。

6  int capacity()

返回此向量的当前容量。

7  voidclear()

移除此向量中的所有元素。

8  Object clone()

返回此向量的一个副本。

9  booleancontains(Object elem)

如果测试指定的对象在此向量的组件。

10     booleancontainsAll(Collection c)

返回true如果此向量包含指定Collection中的所有元素。

11     voidcopyInto(Object[] anArray)

将此向量的组件复制到指定的数组中。

12     ObjectelementAt(int index)

返回组件的指定索引处。

13     Enumerationelements()

返回此向量的组件的枚举。

14     voidensureCapacity(int minCapacity)

增加此向量的容量,如果需要,以确保它能够保存最小容量参数指定的组件数量最少。

15     booleanequals(Object o)

比较指定对象与此向量的相等性。

16     ObjectfirstElement()

返回此向量的第一个组件(位于索引0处的项)。

17     Objectget(int index)

返回此向量中指定位置的元素。

18     inthashCode()

返回此向量的哈希码值。

19     intindexOf(Object elem)

搜索给定参数,用equals方法测试相等的第一次出现元素。

20     intindexOf(Object elem, int index)

搜索给定参数,在开始搜索索引,并测试使用equals方法相等的第一次出现。

21     voidinsertElementAt(Object obj, int index)

指定对象插入在此向量中指定索引处的组件。

22     booleanisEmpty()

如果测试此向量是否不包含组件。

23     ObjectlastElement()

返回此向量的最后一个组件。

24     intlastIndexOf(Object elem)

返回此向量的指定对象的最后一个匹配项的索引。

25     intlastIndexOf(Object elem, int index)

向后搜索指定的对象,从指定的索引开始,并返回它的下标。

26     Objectremove(int index)

移除元素在向量中指定位置。

27     booleanremove(Object o)

在移除此向量中指定元素的第一个匹配,如果向量不包含该元素,它是不变的。

28     booleanremoveAll(Collection c)

移除此向量的所有元素包含在指定Collection。

29     voidremoveAllElements()

移除全部组件从这个载体,并将其大小设置为零。

30     booleanremoveElement(Object obj)

删除第一个(索引最小的)匹配从这个向量的参数。

31     voidremoveElementAt(int index)

removeElementAt(int index)

32     protectedvoid removeRange(int fromIndex, int toIndex)

从这个列表中删除所有索引为fromIndex(包括)和的toIndex,独占的元素。

33     booleanretainAll(Collection c)

保留包含在指定Collection在此向量中仅元素。

34     Objectset(int index, Object element)

替换元素在与指定元素在此向量的指定位置。

35     voidsetElementAt(Object obj, int index)

设置在向量的指定索引处是指定的对象。

36     voidsetSize(int newSize)

设置此向量的大小。

37     intsize()

返回此向量中的组件的数量。

38     ListsubList(int fromIndex, int toIndex)

返回fromIndex(包括)和toIndex,独享这之间List部分视图。

39     Object[]toArray()

返回包含所有在此向量中以正确的顺序元素的数组。

40     Object[]toArray(Object[] a)

返回包含所有在此向量中以正确的顺序元素的数组;返回数组的运行时类型是指定数组的。

41     StringtoString()

返回此向量的字符串表示形式,其中包含每个元素的String表示。

42     voidtrimToSize()

这个微调,向量是向量的当前大小的容量。

注意:

(1) Vector实际上是通过一个数组去保存数据的。当我们构造Vecotr时;若使用默认构造函数,则Vector的默认容量大小是10。

(2) 当Vector容量不足以容纳全部元素时,Vector的容量会增加。若容量增加系数>0,则将容量的值增加“容量增加系数”;否则,将容量大小增加一倍。

(3) Vector的克隆函数,即是将全部元素克隆到一个数组中。

四、示例:

<span style="font-size:18px;">importjava.util.Vector;
importjava.util.List;
importjava.util.Iterator;
importjava.util.Enumeration;

/**
 * @desc Vector测试函数:遍历Vector和常用API
 *
 * @author skywang
 */
public classVectorTest {
    public static void main(String[] args) {
        // 新建Vector
        Vector vec = new Vector();

        // 添加元素
        vec.add("1");
        vec.add("2");
        vec.add("3");
        vec.add("4");
        vec.add("5");

        // 设置第一个元素为100
        vec.set(0, "100");
        // 将“500”插入到第3个位置
        vec.add(2, "300");
       System.out.println("vec:"+vec);

        // (顺序查找)获取100的索引
        System.out.println("vec.indexOf(100):"+vec.indexOf("100"));
        // (倒序查找)获取100的索引
       System.out.println("vec.lastIndexOf(100):"+vec.lastIndexOf("100"));
        // 获取第一个元素
       System.out.println("vec.firstElement():"+vec.firstElement());
        // 获取第3个元素
       System.out.println("vec.elementAt(2):"+vec.elementAt(2));
        // 获取最后一个元素
       System.out.println("vec.lastElement():"+vec.lastElement());

        // 获取Vector的大小
       System.out.println("size:"+vec.size());
        // 获取Vector的总的容量
        System.out.println("capacity:"+vec.capacity());

        // 获取vector的“第2”到“第4”个元素
        System.out.println("vec 2 to4:"+vec.subList(1, 4));

        // 通过Enumeration遍历Vector
        Enumeration enu = vec.elements();
        while(enu.hasMoreElements())
           System.out.println("nextElement():"+enu.nextElement());

        Vector retainVec = new Vector();
        retainVec.add("100");
        retainVec.add("300");
        // 获取“vec”中包含在“retainVec中的元素”的集合
        System.out.println("vec.retain():"+vec.retainAll(retainVec));
       System.out.println("vec:"+vec);

        // 获取vec对应的String数组
        String[] arr = (String[])vec.toArray(new String[0]);
        for (String str:arr)
           System.out.println("str:"+str);

        // 清空Vector。clear()和removeAllElements()一样!
        vec.clear();
//        vec.removeAllElements();

        // 判断Vector是否为空
       System.out.println("vec.isEmpty():"+vec.isEmpty());
    }
}

vec:[100, 2, 300,3, 4, 5]
vec.indexOf(100):0
vec.lastIndexOf(100):0
vec.firstElement():100
vec.elementAt(2):300
vec.lastElement():5
size:6
capacity:10
vec 2 to 4:[2,300, 3]
nextElement():100
nextElement():2
nextElement():300
nextElement():3
nextElement():4
nextElement():5
vec.retain():true
vec:[100, 300]
str:100
str:300
vec.isEmpty():true</span>

六、Java中Vector和ArrayList的区别

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

关于ArrayList和Vector区别如下:

ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。

Vector提供indexOf(obj, start)接口,ArrayList没有。

Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

五:Java之Vector类专题

时间: 2024-08-06 09:57:10

五:Java之Vector类专题的相关文章

JDK1.8源码(五)——java.util.ArrayList 类

关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的. 1.ArrayList 定义 ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复. public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializabl

Vector类与Enumeration接口

Vector类用于保存一组对象,由于java不支持动态数组,Vector可以用于实现跟动态数组差不多的功能.如果要将一组对象存放在某种数据结构中,但是不能确定对象的个数时,Vector是一个不错的选择. 例:将键盘上输入的一个数字序列的每位数字存储在vector对象中,然后在屏幕上打印出各位数字相加的结果. import java.util.*; //Vector类和Enumeration接口都在这个包中 public class TestVector { public static void

java中的Vector类

在java中的同步,是指多个线程在同时要访问某个对象.变量.方法.代码快等等时,保证只有唯一线程访问同步的对象(即用synchronized修为的内容). 也可以这样理解:同步就是指保证在同一时刻只有一个线程访问同步对象的前提下,确保操作同步对象的线程顺序,跟他们发出访问同步对象请求时的顺序一致. Vector是老版本jkd(1.0的时候就有)的一个集合类,因为Vector是同步的而ArrayList是非同步的,所以Vector的性能比ArrayList要差. 在不需要保证同步的情况下.尽量使用

Java Vector 类

Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况. Vector类支持4种构造方法. 第一种构造方法创建一个默认的向量,默认大小为10: Vector() 第二种构造方法创建指定大小的向量. Vector(int size) 第三种构造方法创建指定大小的向量,并且增量用incr指定. 增量表示向

Java数据结构和类有哪些?

Java数据结构和类有哪些?很多java初学者可能记不住或者记不全那么多,今天西安java培训小编为大家整理了Java数据结构和类的知识,希望对大家有所帮助. 一.Vector类 Vector类似于一个数组,但与数组相比在使用上有以下两个优点. 1.使用的时候无需声明上限,随着元素的增加,Vector的长度会自动 增加. 2.Vector提供额外的方法来增加.删除元素,比数组操作高效. Vector类有三个构造函数,分别如下: public Vector(); 该方法创建一个空的Vector.

Java 中 Vector、ArrayList、List 使用深入剖析

线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类. Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Collection是最基本的集合接口,一个C

Java中vector用法整理

ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创建.向Vector中添加元素.从Vector中删除元素. * 统计Vector中元素的个数和遍历Vector中的元素. */ public class VectorDemo{ public static void main(String[] args){ //Vector的创建 //使用Vector

Java 第八章 类的方法(一) 笔记

Java 第八章 类的方法(一) 一.类的方法语法: 访问修饰符 返回值类型 方法名(){             方法体:      } 二.方法名的规范:     1.必须以字母."_"或"$"开头     2.可以有数字,但不能以数字开头.     3.如果方法名是多个单词组成 ,第一个单词的首字母小写,      其后单词首字母单词大写.     4.方法名都采用动词. 三.方法的返回值     1.有返回值:必须告知返回值的数据类型,并且返回相应的值. 

Java中String类学习总结

java中String类的使用频率非常高,本人在学习此模块时,认为下列几点知识值得注意: 一.String是不可变对象 java.lang.String类使用了final修饰,不能被继承.Java程序中的所有字面值,即双引号括起的字符串,如"abc",都是作为String类的实例实现的.String是常量,其对象一旦构造就不能再被改变.换句话说,String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创造了一个全新的String对象,以包含修改后的字符串内容.而最