Vector的使用
vector类底层数组结构的,它包含可以使用整数索引进行访问的组件。不过,vector的大小可以根据需要增大或缩小,以适应创建vector后进行添加或移除项的操作,因此不需要考虑元素是否越界或者会不会浪费内存的问题。
由vector的iterator和listIterator方法所返回的迭代器是快速失败的:也即是它不能并发执行操作。如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的remove或add方法之外的任何其他方式),则迭代器将抛出ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着将来不确定的时间任意发生不确定行为的风险。
vector的elements()方法返回的Enumeration不是快速失败的。
通过代码说明这个问题:
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
Enumeration en=v.elements();
while(en.hasMoreElements())
{
Object object=en.nextElement();
if(object.equals("abc3"))
{
v.addElement("abc5"); // 不会出现异常
}
System.out.println(object);
}
Iterator it=v.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(obj.equals("abc3"))
{
v.addElement("abc5");// 会出现异常
// 面对并发的修改,迭代器很快就完全失败!
}
System.out.println(obj);
}
}
}
Vector的四种构造方法:
1、Vector(); 构造一个空向量,使其内部数据数组的大小为10,其标准容量增量为零。 Vector vec=new Vector();
2、Vector(Collection c); 构造一个包含指定collection中的元素的向量,这些元素按其collection的迭代器返回元素的顺序排列。 Vector v=new Vector(vec);
3、Vector(int initialCapacity); 使用指定的初始容量和等于零的容量增量构造一个空向量。
4、Vector(int initialCapacity,int capacityIncrement); 使用指定的初始容量和容量增量构造一个空的向量。
Vector类中的方法:
1、boolean add(E e); 将指定的元素添加到此向量的末尾。
2、void addElement(E obj); 将指定的组件添加到此向量的末尾,将其大小增加1。
3、void add(int indext,E e); 在此向量的指定位置插入指定的元素。
4、boolean addAll(Collection c); 将指定Collection中的所有元素添加到此向量的末尾,按照指定collection的迭代器所返回的顺序添加这些元素。
5、boolean addAll(int index,Collection c); 在指定位置将指定Collection中的所有元素插入到此向量中。
6、int capacity(); 返回此向量的当前容量。
7、Object clone(); 返回向量的一个副本。
8、boolean contains(Object o); 如果此向量包含指定的元素,怎返回true。
9、boolean containsAll(Collection c); 如果此向量包含Collection中的所有元素,则返回true。
10、void copyInto(Object[] anArray); 将此向量的组件复制到指定的数组中。
11、E elementAt(int index); 返回指定索引处的组件。
12、Enumeration<E> elements(); 返回此向量的组件的枚举。
13、void ensureCapacity(int minCapacity); 增加此向量的容量(如有必要),以确保其至少能够保证最小容量参数指定的组件数。
14、boolean equals(Object o); 比较指定对象与此向量的相等性。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
Vector vec=new Vector();
vec.add("abc1");
vec.add("abc2");
vec.add("abc3");
vec.add("abc4");
System.out.println(v.equals(vec));
}
}
15、E firstElement(); 返回此向量的第一个组件(位于索引0)处的项。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
System.out.println(v.firstElement());
System.out.println(v.firstElement());
Vector vec=new Vector();
vec.add("aa");
vec.add("bb");
v.add(0,vec); // 插入第一个位置
System.out.println(v.firstElement());
System.out.println(v.firstElement());
}
}
16、E lastelement(); 返回此向量的最后一个组件。代码略。
17、E get(int index); 返回向量中指定位置 的元素。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
System.out.println(v.get(0));
System.out.println(v.get(3));
// 在这里,index值不能小于0,或者大于3
}
}
18、int hashCode(); 返回此向量的哈希码值。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
System.out.println(v.hashCode());
}
}
19、int indexOf(Object o,int index); 返回此向量中第一次出现的指定的元素的索引,从index处正向索引,如果未找到该元素,则返回-1.
20、int indexOf(Object o); 返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回-1。
21、int lastIndexOf(Object o,int index); 返回此向量中最后一次出现的指定元素的索引,从index处逆向搜索,如果未找到该元素,则返回-1.
22、int lastIndexOf(Object o); 返回此向量中最后一次出现的指定元素的索引,如果此向量不包含该元素,则返回-1。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
System.out.println(v.indexOf("abc3"));
System.out.println(v.indexOf("abc3",3));
System.out.println(v.lastIndexOf("abc3"));
System.out.println(v.lastIndexOf("abc3",3));
}
}
23、boolean isEmpty(); 测试此向量是否不包含组件。
24、void clear(); 从此向量中移除所有元素。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
System.out.println(v.isEmpty()); // 非空输出false
v.clear();
System.out.println(v.isEmpty()); // 空输出true
}
}
25、E remove(int index); 移除此向量中指定位置的
元素。
26、boolean remove(Object o); 移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变。
27、boolean removeAll(Collection c); 从此向量中移除包含在指定Collection中的所有元素。
28、void removeAllElements(); 从此向量中移除全部组件,并将其大小设置为零。
29、boolean removeElement(Object obj); 从此向量中移除变量的第一个(索引最小的)匹配项。
30、void removeElementAt(int index); 删除指定索引处的组件。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
System.out.println(v.removeElement("abc1"));
System.out.println(v);
Vector vec=new Vector();
vec.add("abc4");
System.out.println(v.remove(2));
System.out.println(v);
System.out.println(v.remove("abc2"));
System.out.println(v);
System.out.println(v.removeAll(vec));
System.out.println(v);
v.removeAllElements();
System.out.println(v);
}
}
31、protected void removeRange(int fromIndex,int toIndex); 从此list中移除位于formIndex(包括)与toIndex(不包括)之间的所有元素。
32、boolean retainAll(Collection c); 在此向量中仅保留包含在指定Collection中的元素。
package cn.list.demo;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
Vector vec=new Vector();
vec.add("abc2");
vec.add("abc4");
System.out.println(v.retainAll(vec));
System.out.println(v);
}
}
此外,还有一些其他方法,这里不再一一列举。有兴趣的可以通过API的介绍自己做练习。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37147.html