·集合类用于存储一组对象,其中每个对象称为元素。如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。