据说期末考试要考到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的克隆函数。即是将所有元素克隆到一个数组中。

四、演示样例:

  1. <span style="font-size:18px;">importjava.util.Vector;
  2. importjava.util.List;
  3. importjava.util.Iterator;
  4. importjava.util.Enumeration;
  5.  
  6. /**
  7. * @desc Vector測试函数:遍历Vector和经常使用API
  8. *
  9. * @author skywang
  10. */
  11. public classVectorTest {
  12. public static void main(String[] args) {
  13. // 新建Vector
  14. Vector vec = new Vector();
  15.  
  16. // 加入元素
  17. vec.add("1");
  18. vec.add("2");
  19. vec.add("3");
  20. vec.add("4");
  21. vec.add("5");
  22.  
  23. // 设置第一个元素为100
  24. vec.set(0, "100");
  25. // 将“500”插入到第3个位置
  26. vec.add(2, "300");
  27. System.out.println("vec:"+vec);
  28.  
  29. // (顺序查找)获取100的索引
  30. System.out.println("vec.indexOf(100):"+vec.indexOf("100"));
  31. // (倒序查找)获取100的索引
  32. System.out.println("vec.lastIndexOf(100):"+vec.lastIndexOf("100"));
  33. // 获取第一个元素
  34. System.out.println("vec.firstElement():"+vec.firstElement());
  35. // 获取第3个元素
  36. System.out.println("vec.elementAt(2):"+vec.elementAt(2));
  37. // 获取最后一个元素
  38. System.out.println("vec.lastElement():"+vec.lastElement());
  39.  
  40. // 获取Vector的大小
  41. System.out.println("size:"+vec.size());
  42. // 获取Vector的总的容量
  43. System.out.println("capacity:"+vec.capacity());
  44.  
  45. // 获取vector的“第2”到“第4”个元素
  46. System.out.println("vec 2 to4:"+vec.subList(1, 4));
  47.  
  48. // 通过Enumeration遍历Vector
  49. Enumeration enu = vec.elements();
  50. while(enu.hasMoreElements())
  51. System.out.println("nextElement():"+enu.nextElement());
  52.  
  53. Vector retainVec = new Vector();
  54. retainVec.add("100");
  55. retainVec.add("300");
  56. // 获取“vec”中包括在“retainVec中的元素”的集合
  57. System.out.println("vec.retain():"+vec.retainAll(retainVec));
  58. System.out.println("vec:"+vec);
  59.  
  60. // 获取vec相应的String数组
  61. String[] arr = (String[])vec.toArray(new String[0]);
  62. for (String str:arr)
  63. System.out.println("str:"+str);
  64.  
  65. // 清空Vector。clear()和removeAllElements()一样。
  66. vec.clear();
  67. // vec.removeAllElements();
  68.  
  69. // 推断Vector是否为空
  70. System.out.println("vec.isEmpty():"+vec.isEmpty());
  71. }
  72. }
  73.  
  74. vec:[100, 2, 300,3, 4, 5]
  75. vec.indexOf(100):0
  76. vec.lastIndexOf(100):0
  77. vec.firstElement():100
  78. vec.elementAt(2):300
  79. vec.lastElement():5
  80. size:6
  81. capacity:10
  82. vec 2 to 4:[2,300, 3]
  83. nextElement():100
  84. nextElement():2
  85. nextElement():300
  86. nextElement():3
  87. nextElement():4
  88. nextElement():5
  89. vec.retain():true
  90. vec:[100, 300]
  91. str:100
  92. str:300
  93. 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类专题的更多相关文章

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

    JDK1.8源码(五)--java.lang. https://www.cnblogs.com/IT-CPC/p/10897559.html

  2. java中Vector类的常用方法

    Vector类是实现List接口,所以继承的方法就不在这里讲了 https://www.cnblogs.com/xiaostudy/p/9503199.html public void add(int ...

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

    关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的. 1.ArrayList 定义 ArrayList 是一个用数组实 ...

  4. JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解)

    Vector 向量 Vector简述 1).Vector底层是用数组实现的List 2).虽然线程安全,但是效率低,所以并不是安全就是好的 3).底层大量方法添加synchronized同步标记,sy ...

  5. Vector类与Enumeration接口

    Vector类用于保存一组对象,由于java不支持动态数组,Vector可以用于实现跟动态数组差不多的功能.如果要将一组对象存放在某种数据结构中,但是不能确定对象的个数时,Vector是一个不错的选择 ...

  6. Java API —— ArrayList类 & Vector类 & LinkList类

    1.ArrayList类     1)ArrayList类概述         · 底层数据结构是数组,查询快,增删慢         · 线程不安全,效率高     2)ArrayList案例   ...

  7. Java Vector 类

    Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...

  8. Java入门篇(五)——字符串/String类

    前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...

  9. 【java】学习路径25-ArrayList类,Vector类,LinkedList类的使用和区别,Iterator迭代器的使用

    ArrayList的使用 ArrayList类:可变化长度的数组. 与一般的数组不同的是,其长度不固定,可以添加任意类型的数据. 也可以添加不同类型的数据,但是一般不这么做. ArrayList类位于 ...

随机推荐

  1. android 横竖屏切换不重走生命周期

    android在系统配置发生改变时,Activity会被重新创建,但是某些情况下我们希望系统配置改变时不会重新创建Activity,这个时候我们可以给Activity指定相对应的configChang ...

  2. queue的入门

    #include "iostream"#include "queue" using namespace std; void main12(){ queue &l ...

  3. 根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局

    在数学中,矩阵是以行和列排列的数字,符号或表达式的矩形阵列,任何矩阵都可以通过相关字段的标量乘以元素.矩阵的主要应用是表示线性变换,即f(x)= 4 x等线性函数的推广.例如,旋转的载体在三维空间是一 ...

  4. Java线程面试题

     1:什么是线程?    线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线 ...

  5. Breadth-first search 算法(Swift版)

    在讲解Breadth-first search 算法之前,我们先简单介绍两种数据类型Graph和Queue. Graph 这就是一个图,它由两部分组成: 节点, 使用圆圈表示的部分 边, 使用线表示的 ...

  6. asp.net web api 版本控制

    版本控制   版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通过VersionController ...

  7. 用原型代替PRD时,原型应该包含哪些内容

    随着互联网节奏越来越快,传统的需求文档已经比较难适应市场的脚步,特别对于要求敏捷的团队来说,冗余而细致入微的需求文档已经成为包袱(这么长个文档领导也不会看呀).目前大多数团队更喜爱直接使用原型来代替需 ...

  8. 如何优化Cocos2d-X游戏的内存

    在游戏项目优化中都会碰到一个问题,如何既能减少内存又能尽量减少包的大小?在实际项目中有些经验分享一下,事实上2D游戏中最占内存的就是图片资源,一张图片使用不同的纹理格式带来的性能差异巨大,下表是我在I ...

  9. EntityFramework For Mysql 动态切换数据源

    1.简介 在工作中遇到一个问题.项目有三个数据库(三个数据库表结构一样),用户可以选择使用哪个数据库.其实就是动态切换数据库连接. 2.EntityFramework For Mysql 先来简单的介 ...

  10. Flex布局学习笔记

    任何元素都可以使用Flex布局,包括行内元素 display: flex; display: inline-flex使用Flex布局之后,子元素的float, clear, vertical-alig ...