Java中Vector类的用法
一、本文是对三篇文章的总结与排版,链接如下
链接1: [https://www.cnblogs.com/zhaoyan001/p/6077492.html]
链接2:[https://blog.csdn.net/lskyne/article/details/8769147]
链接3:[http://www.cnblogs.com/xiaostudy/p/9526270.html]
二、有关Vector
Vector 可实现自动增长的对象数组。 java.util.vector提供了向量类(vector)以实现类似动态数组的功能。
Java语言中没有指针的概念,为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。
创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。 对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。
ArrayList会比Vector快,但它是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 鸭~
另外,Vector 在参数传递中发挥着举足轻重的作用。
在Applet 中有一块画布(Canvas) 和一个(Panel),
Panel 中放着用户要输入的信息,根据这些信息把参数传递到canvas 中,这时在Java 中用一个接口(Interface), 而在接口中需用一个Vector 去传递这些参数。
如下:
import java.util.Vector
interface codeselect{ Vector codeselect=new Vector(); } 显示数学信息
Vector(0)存入学生编号
Vector(1)存入学科
在Panel 中当用户在TextField 和Choice 中选择自己所要求的内容,程序中通过事件响应把值传到向量Vector 中。
1、向量类提供的三种构造方法
(1)public vector()
(2)public vector(int initialcapacity)
(3)public vector(int initialcapacity,int capacityIncrement)
initialcapacity 初始容量;capacityIncrement 容量增量(有没有超级贴心!~ 快叫我小仙女!~
使用第一种方法系统会自动对向量进行管理,若使用后两种方法。则系统将根据参数,initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时。系统会扩充向量对象存储容量。
参数capacityincrement给定了每次扩充的扩充值。当capacityincrement为0的时候,则每次扩充一倍,利用这个功能可以优化存储。
2、有关Vector< E >
Vector< E > v=new Vector< E >();
E可以是泛型类,如Stirng,可以自定义,感觉E很像但链表中的节点定义,Vector则是数组
3、Vector类中的各种方法
(1)插入功能:
①public final synchronized void addElement(Object obj)
将obj插入向量的尾部。obj可以是任何类型的对象。对同一个向量对象,亦可以在其中插入不同类的对象。 但插入的应是对象而不是数值,所以插入数值时要注意将数组转换成相应的对象。
例如:要插入整数1时,不要直接调用v1.addElement(1),正确的方法为:
Vector v1 = new Vector();
Integer integer1 = new Integer(1);
v1.addElement(integer1);
②public final synchronized void setElementAt(Object obj,int index)
将index处的对象设置成obj,原来的对象将被覆盖。
③public final synchronized void insertElementAt(Object obj,int index)
在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。
④void add(int index, E element)
在此向量的指定位置插入指定的元素。
⑤boolean addAll(Collection<? extends E> c)
将指定 Collection 中的所有元素追加到此向量的末尾,按照指定集合的迭代器所返回的顺序追加这些元素。
⑥ boolean addAll(int index, Collection<? extends E> c)
在指定位置将指定 Collection 中的所有元素插入到此向量中。
(2)删除功能:
①public final synchronized void removeElement(Object obj)
从向量中删除obj,若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。
②public final synchronized void removeAllElement();
删除向量所有的对象
③public fianl synchronized void removeElementAt(int index)
删除index所指的地方的对象
④void clear()
从此向量中移除所有元素。
⑤boolean removeAll(Collection<?> c)
从此向量中移除包含在指定 Collection 中的所有元素。
⑥protected void removeRange(int fromIndex, int toIndex)
从此 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)之间的所有元素。
⑦boolean retainAll(Collection<?> c)
在此向量中仅保留包含在指定 Collection 中的元素。
(3)查询搜索功能:
①public final int indexOf(Object obj)
从向量头开始搜索obj,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1.
②public final synchronized int indexOf(Object obj,int index)
从index所表示的下标处开始搜索obj.
③public final int lastindexOf(Object obj)
从向量尾部开始逆向搜索obj.
④public final synchornized int lastIndexOf(Object obj,int index)
从index所表示的下标处由尾至头逆向搜索obj.
⑤public final synchornized firstElement()
获取向量对象中的首个obj
⑥public final synchornized Object lastElement()
获取向量对象的最后一个obj
⑦boolean contains(Object elem)
测试指定的对象是否为此向量中的组件。
boolean containsAll(Collection<?> c)
如果此向量包含指定 Collection 中的所有元素,则返回 true。
⑧E elementAt(int index)
返回指定索引处的组件
⑨E get(int index)
返回向量中指定位置的元素。
(4)获取向量元素的个数、容量值:
public final int size();
它们返回值是向量中实际存在的元素个数,而非向量容量。可以调用方法capacity()来获取容量值。
(5)定义向量的大小:
public final synchronized void setsize(int newsize);
此方法用来定义向量的大小,若向量对象现有成员个数已经超过了newsize的值,则超过部分的多余元素会丢失。
(6)Enumeration接口类:
在Enumeration中封装了有关枚举数据集合的方法。
在Enumeration提供了方法hasMoreElement()来判断集合中是否还有其他元素和方法nextElement()来判断集合中是否还有其他元素和方法nextElement()来获取下一个元素。利用这两个方法,可以依次获得集合中的元素。
Vector中提供方法:
public final synchronized Enumeration elements();
此方法将向量对象对应到一个枚举类型。java.util包中的其他类中也都有这类方法,以便于用户获取对应的枚举类型
例子: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(new Integer(2));
//转为字符串并打印
System.out.println("The Vector v1 is:\n\t"+v1);
//向指定位置插入新对象
v1.insertElementAt("three",2);
v1.insertElementAt(new Float(3.9),3);
System.out.println("The Vector v1(used method
insertElementAt()is:\n\t)"+v1);
//将指定位置的对象设置为新的对象
//指定位置后的对象依次往后顺延
v1.setElementAt("four",2);
System.out.println("The vector v1 cused method setElmentAt()is:\n\t"+v1);
//从向量对象v1中删除对象integer1
//由于存在多个integer1,所以从头开始。
//找删除找到的第一个integer1.
v1.removeElement(integer1);
//使用枚举类(Enumeration)的方法取得向量对象的每个元素。
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();
//按不同的方向查找对象integer1所处的位置
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));
//重新设置v1的大小,多余的元素被抛弃
v1.setSize(4);
System.out.println("The new Vector(resized the vector)is:"+v1);
}
}
(7)返回向量的副本
Object clone()
(8)将此向量的组件复制到指定的数组中
void copyInto(Object[] anArray)
(9)比较指定对象与此向量的相等性
boolean equals(Object o)
(10)把集合中的元素复制到anArray数组中去
public void copyInto(Object[] anArray)
(11)调整容量
①public void setSize(int newSize)
设置集合的容量大小为newSize,如果newSize大于集合元素个数,那么会在后面添加null,如果newSize小于集合元素个数,那么直保留newSize个元素
②public void trimToSize()
整理集合的容量大小,如果集合元素个数等于容量大小,那么没有变化,如果集合个数小于容量大小,那么容量会设置为元素个数大小
小小编的小小吐槽和balabala
第一次整理材料哇…必须要吐槽一下CSDN了,好几次剪切粘贴后直接给我灰掉,显示文本字数为0.气得我写一点保存一次…
有错误的话欢迎大家在评论区指出哦~~ 一起进步!~