·集合类用于存储一组对象,其中每个对象称为元素。如Vector、Enumeration、ArrayList、Collection、Set、List等集合类和接口。
·Vector类和Enumeration接口
Vector是JAVA提供的一种高级数据结构,可用于保存一系列的对象,由于JAVA不支持动态数组,Vector类提供了一种与动态数组相似的功 能:如果将若干对象保存在一种数据结构中,但不能预先确定要保存对象的数目时,可选择Vector类。
·编程举例:将键盘上输入的一个数字序列中的每位数字存储在Vector对象中,然后在屏幕上打印出每位数字相加的结果,如,输入32,打印出5;输入1234,打印出10;
·Enumeration的nextElement可以逐一取出Vector中的Object类型的对象,使用时需要进行类型转换。Enumeration对象内部有一个指示器,指向nextElement()方法所要返回的对象的位置,在第一次调用nextElement()方法之前,指示器指向第一个对象或者空对象。
Test Code:
import java.io.IOException;
import java.util.*;
public class TestVector {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Vector v = new Vector();//若定义成 Vector<Integer> v = new Vector(),则只能加入Integer类型的对象
int b = 0;
System.out.println("Please enter a number:");
while(true){
try {
b = System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(b=='/r'||b=='/n')
break;
else{
int num = b -'0';
v.addElement(new Integer(num));
}
}
int sum = 0;
Enumeration e = v.elements();
while(e.hasMoreElements()){
Integer intObj = (Integer)e.nextElement();
sum += intObj.intValue();
}
System.out.println(sum);
}
}
Collection接口与Iterator接口
·Collection是接口,不能直接用Collection创建实例对象,必须用implement了Collection接口的类来创建实例。
·编程举例:用ArrayList和Iterator改写上面的例子程序。
import java.io.IOException;
import java.util.*;
public class TestVector {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList v = new ArrayList();//若定义成 Vector<Integer> v = new Vector(),则只能加入Integer类型的对象
int b = 0;
System.out.println("Please enter a number:");
while(true){
try {
b = System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(b=='/r'||b=='/n')
break;
else{
int num = b -'0';
v.add(num);
}
}
int sum = 0;
Iterator e = v.iterator();
while(e.hasNext()){
Integer intObj = (Integer)e.next();
sum += intObj.intValue();
}
System.out.println(sum);
}
}
总结:
·Vector中所有方法都是线程同步的,如果有两个线程并发访问Vector对象是安全的。需要额外的开销用于同步监视器的运行,使程序的效率降低。
·ArrayList中的所有方法都是不同步的,若不存在同步的问题,则使用Vector安全性高。若有同步问题,则需要程序员自己对ArrayList中方法进行同步处理。
·Collection接口、Set接口、List接口的区别:
·Collection是Set和List的父类,Collection接口中各个元素对象之间没有指定的顺序,允许有重复元素和多个null元素对象,不能实现排序。
·Set各元素对象之间没有指定的顺序,但是不允许有重复元素,最多允许有一个null元素对象。
·List各个元素对象之间有指定的顺序,允许有重复元素和多个null元素对象,可以进行排序。
· Enumeration接口只有两个方法:boolean
hasMoreElements(),
E
nextElement()
Iterator接口有三个方法:boolean
hasNext(),
E
next(),
void
remove()
另外还有个Iterator接口,和Enumeration是差不多的,不过名称比较短,通常推荐用Iterator。
Iterator会检查collection是否被其他线程改动,若被改动则会fail。