List接口——Vector(Stack)
来源:互联网 发布:纯真ip数据库 mysql 编辑:程序博客网 时间:2024/06/06 04:37
List接口——Vector(Stack)
作者:zccst
1. 接口实现类Vector
1.1 概述
java.util.Vector也实现了List接口,其描述的也是可变长度的对象数组。
Vector类以类似数组的方式顺序地存储数据,但是具有比数组更强大的功能;它是允许不同类型元素共存的变长数组。其特点是:
1,Vector类允许不同类型元素共存;
2,Vector对象中元素的个数是可变的,它就像一个动态数组。
Vector类适合于下列情况使用:
1, 序列中的元素都是对象
2, 需要处理的对象数目不定
3, 需要将不同的类的对象组合成一个数据序列
4, 需要频繁的对序列中的元素进行插入和删除
5, 需要经常定位序列中的对象或进行查找工作
6, 在不同类之间传递大量的数据
与ArrayList的差别:Vector是同步(线程安全),但运行效率要低一些,主要用在多线程环境中,而ArrayList是不同步的,适合在单线程环境中使用。
常用的方法如下:
public Vector();
public Object elementAt(int index); //获取指定位置元素
public void addElement(Object obj); //增加一个元素
public boolean removeElement(Object obj); //删除一个元素
public void insertElementAt (int index); //向指定位置插入元素
public void removeElementAt(Element obj,int index); //删除指定位置元素
public void removeAllElements(); //删除所有元素
public Object[] toArray();
1.2 Vector类——构造方法
public Vector(); //创建一个空向量
public Vector(int initialCapacity); //创建一个指定元素为initialCapacity的空向量
public Vector(int Capacity, int increment); //创建一个指定元素个数为Capacity的空向量,当向量中的元素个数超出容量大小时,以increment量增加。
例如:Vector vec= new Vector(10, 5);
1.3 Vector类——常用方法
1,向量中增加、插入元素
public void addElement(Object obj); //增加一个元素
public void setElementAt(Element obj, intindex); //设置指定位置元素
public void insertElementAt (Object obj , intindex); //向指定位置插入元素
2,获取向量中的元素
public Object elementAt(int index); //获取指定位置元素
public Enumeration elements(); //从索引0开始列举向量中所有元素。该方法返回一个列举(Enumeration)对象。
通常用Enumeration中的以下两个方法打印向量中的所有元素:
(1) boolean hasMoreElements();
(2) public Object nextElement();
用法:for(Enumeratione = vec.elements(); e.hasMoreElements();)
{ System.out.println(e.nextElement()); }
例如:InsertAndPrintElements.java
import java.util.Date;
import java.util.Vector;
import java.util.Enumeration;
public class InsertAndPrintElements{
publicstatic void main(String[] args){
Vectorvec=new Vector(10,5);
vec.addElement(newInteger(88));
vec.addElement(newCharacter('@'));
vec.addElement(newBoolean(true));
vec.addElement(newString("java"));
System.out.println("向量中的所有元素:");
myprint(vec);
vec.insertElementAt(newDate(),2);
vec.setElementAt(newString("向量"),0);
System.out.println("插入和替换后向量中的所有元素:");
myprint(vec);
}
staticvoid myprint(Vector vect){
for(Enumeratione=vect.elements();e.hasMoreElements();){
System.out.print("/t"+e.nextElement());
}
}
}
输出结果:
向量中的所有元素:
88 @ true java插入和替换后向量中的所有元素:
向量 @ SunDec 27 12:30:45 CST 2009 true java
3,删除向量中的元素
public boolean removeElement(Object obj); //删除一个元素
public void removeElementAt(Element obj,int index); //删除指定位置元素
public void removeAllElements(); //删除所有元素
例如:RemoveElements.java
import java.util.Date;
import java.util.Vector;
import java.util.Enumeration;
public class RemoveElements{
publicstatic void main(String[] args){
Vectorvec=new Vector();
for(inti=1;i<=3;i++){
vec.addElement(newString("java"));
vec.addElement(newInteger(i*i));
}
System.out.println("向量中的所有元素:");
myPrint(vec);
System.out.println("删除向量中的所有字符串值为/"java/"的元素:");
while(vec.removeElement("java"))
;
myPrint(vec);
System.out.println("删除向量中所有元素后:");
vec.removeAllElements();
myPrint(vec);
}
staticvoid myPrint(Vector vect){
for(Enumeratione=vect.elements(); e.hasMoreElements();)
System.out.print("/t"+e.nextElement());
System.out.println();
}
}
输出结果:
向量中的所有元素:
java 1 java 4 java 9
删除向量中的所有字符串值为"java"的元素:
1 4 9
删除向量中所有元素后:
4, 查找向量中的元素
public int indexOf(Object elem); //返回查找元素第一次出现的位置
public int lastIndexOf(Object elem); //返回查找元素最后一次出现的位置
public boolean contains(Object elem); //如果包含指定元素,返回true
5,其他方法
public int Capacity(); //容量大小
public int size(); //对象的个数
public void copyInto(Object[] anArray); //转换成数组
public Object[] toArray(); //转换成数组
public String toString(); //以字符串形式输出
例如:ToObjectArray.java
import java.util.*;
public class ToObjectArray{
publicstatic void main(String[] args){
Vectorvec=new Vector(5,10);
for(inti=1;i<=3;i++){
vec.addElement(newString("java"));
vec.addElement(newInteger(i*i));
}
System.out.println("向量中元素的个数:"+vec.size());
System.out.println("向量的容量大小:"+vec.capacity());
System.out.println(vec.toString());
Objectobj1[]=new Object[vec.size()]; //调用public void copyInto(Object[]anArray);
vec.copyInto(obj1);
show(obj1);
Objectobj2[]=vec.toArray(); // 调用public Object[] toArray();效果相同
show(obj2);
}
staticvoid show(Object[] obj){
for(inti=0;i<obj.length;i++)
System.out.print(obj[i]+"; ");
System.out.println();
}
}
输出结果:
向量中元素的个数:6
向量的容量大小:15
[java, 1, java, 4, java, 9]
java; 1; java; 4; java; 9;
java; 1; java; 4; java; 9;
1.4 Vector类与数组的比较
Vector
Array
内存申请
可动态申请
一次性申请
有序结构
是
是
元素个数
可变
不可变
元素类型
只能是对象,不能是简单数据类型
可以是对象,也可以是简单数据类型
元素类型限制
无
类型必须相同
2. Stack类(继承了Vector类)
java.util.Stack类继承了Vector类,对应数据结构中以“后进先出”方式存储和操作数据的对象栈。
Stack中常用的栈操作方法如下:
public Stack();
public Object push(Element item); //像栈顶放入一个新的对象
public Object pop(); //取出栈顶对象,移除它
public Object peek(); //查看栈顶对象,但不移除它
public boolean empty(); //判定是否为空
public void clear(); //清除栈中元素
public int search(Object O); //查找指定元素位置,并返回位置
例如:TestStack.java
import java.util.Date;
import java.util.Stack;
public class TestStack{
publicstatic void main(String[] args) {
Stacks = new Stack();
s.push("hello");
s.push(newDate());
s.push(400); //自动封装,等价于s.push(newInteger(400));
s.push(3.14);
System.out.println("弹栈前:size=" + s.size());
System.out.println(s.pop());
System.out.println("弹栈后:size=" + s.size());
System.out.println(s.peek());
System.out.println("peek操作后:size=" + s.size());
while(!s.isEmpty())
System.out.println(s.pop());
}
}
输出结果:
弹栈前:size=4
3.14
弹栈后:size=3
400
peek操作后:size=3
400
Sun Dec 27 13:24:01 CST 2009
hello
- List接口——Vector(Stack)
- List 接口—— Vector(Stack)
- JAVA集合二 ——list(03 Vector、Stack)
- 16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)
- list、Vector、迭代器和Stack
- java vector,list,map,stack,queue
- Stack/Queue与Vector/List的联系
- STL学习——STL中的序列式容器及适配器总结(vector、list、deque、stack、queue)
- STL——list、stack、queue
- JAVA进阶4.8——Vector和Stack
- Java集合——Stack和Vector应用实例
- Java数据结构——Stack和父类Vector
- stl 常用函数(包括vector list stack queue)
- STL 整理map、set、vector、list、stack、queue、deque、priority_queue
- java类集(List/Set/Map/Iterator)(Enumeration/Vector/Stack/Properties)
- C++ vector,list,dequeue,stack 存储结构浅析
- STL详解(vector,list,deque,stack,queue,priority_queue;map,set)
- map、set、vector、list、stack、queue、deque、priority_queue
- Java Stack Heap
- 学习spring事务模板
- 如何删除GHOST镜像
- IsPostBack深入探讨
- SIM卡相关
- List接口——Vector(Stack)
- Linux系统的硬件驱动程序编写原理
- 验证 HTML文件
- 最好的兄弟jin结婚了!
- 多文件上传(ajax)
- java压缩文件成tar.gz格式
- java.util.Iterator(迭代器)
- 关于工程、控件引用
- 静态web和动态web的区别与联系