List 接口—— Vector(Stack)
来源:互联网 发布:java 生成仪表盘 编辑:程序博客网 时间:2024/06/06 18:26
List 接口—— Vector(Stack)
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, int index); // 设置指定位置元素
public void insertElementAt (Object obj , int index); // 向指定位置插入元素
2 ,获取向量中的元素
public Object elementAt(int index); // 获取指定位置元素
public Enumeration elements(); // 从索引 0 开始列举向量中所有元素。该方法返回一个列举( Enumeration )对象。
通常用 Enumeration 中的以下两个方法打印向量中的所有元素:
(1) boolean hasMoreElements();
(2) public Object nextElement();
用法: for(Enumeration e = 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{
public static void main(String[] args){
Vector vec=new Vector(10,5);
vec.addElement(new Integer(88));
vec.addElement(new Character('@'));
vec.addElement(new Boolean(true));
vec.addElement(new String("java"));
System.out.println(" 向量中的所有元素 :");
myprint(vec);
vec.insertElementAt(new Date(),2);
vec.setElementAt(new String(" 向量 "),0);
System.out.println(" 插入和替换后向量中的所有元素 :");
myprint(vec);
}
static void myprint(Vector vect){
for(Enumeration e=vect.elements();e.hasMoreElements();){
System.out.print("/t"+e.nextElement());
}
}
}
输出结果:
向量中的所有元素 :
88 @ true java 插入和替换后向量中的所有元素 :
向量 @ Sun Dec 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{
public static void main(String[] args){
Vector vec=new Vector();
for(int i=1;i<=3;i++){
vec.addElement(new String("java"));
vec.addElement(new Integer(i*i));
}
System.out.println(" 向量中的所有元素: ");
myPrint(vec);
System.out.println(" 删除向量中的所有字符串值为 /"java/" 的元素: ");
while(vec.removeElement("java"))
;
myPrint(vec);
System.out.println(" 删除向量中所有元素后: ");
vec.removeAllElements();
myPrint(vec);
}
static void myPrint(Vector vect){
for(Enumeration e=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{
public static void main(String[] args){
Vector vec=new Vector(5,10);
for(int i=1;i<=3;i++){
vec.addElement(new String("java"));
vec.addElement(new Integer(i*i));
}
System.out.println(" 向量中元素的个数: "+vec.size());
System.out.println(" 向量的容量大小: "+vec.capacity());
System.out.println(vec.toString());
Object obj1[]=new Object[vec.size()]; // 调用 public void copyInto(Object[] anArray);
vec.copyInto(obj1);
show(obj1);
Object obj2[]=vec.toArray(); // 调用 public Object[] toArray(); 效果相同
show(obj2);
}
static void show(Object[] obj){
for(int i=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 类与数组的比较
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{
public static void main(String[] args) {
Stack s = new Stack();
s.push("hello");
s.push(new Date());
s.push(400); // 自动封装 , 等价于 s.push(new Integer(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
- 下载重命名技术个人谈
- 面试时经常考的------对字符串的操作(一)
- 关于静态成员函数的一些认识
- 面试时经常考的------对字符串的操作(二)
- 新成员报道
- List 接口—— Vector(Stack)
- zend studio 代码换行
- MyEclipse6.5安装SVN插件的三种方法
- 背包基础问题讲解
- 背包基础问题讲解
- hello c
- zend studio windows 下 实现单步调试 网站
- 雨...
- oracle