ITEEDU

Java Gossip: ArrayList

ArrayList类别实作了List接口,List接口是Collection接口的子接口,主要增加了根据索引取得对象的方法。

ArrayList使用数组实作List接口,所以对于快速的随机取得对象来说,使用ArrayList可以得到较好的效能,不过在移除对象或插入对象时,ArrayList就比较慢(使用 LinkedList 在这方面就好的多)。

来看看一个ArrayList的范例:

ArrayListDemo.java
package onlyfun.caterpillar;
import java.util.*;
public class ArrayListDemo {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		List list = new ArrayList();
		System.out.println("输入名称(quit结束)");
		while(true) {
			System.out.print("# ");
			String input = scanner.next();
			if(input.equals("quit"))
			break;
			list.add(input);
		}
		System.out.print("显示输入: ");
		for(int i = 0; i < list.size(); i++)
		System.out.print(list.get(i) + " ");
		System.out.println();
	}
}

在 J2SE 5.0 之后新增了泛型(Generic)的功能,使用对象容器时建议容器中将储存的对象型态,如此您的对象在存入容器会被限定为您所宣告的型态,而取出时,也不至于失去原来的型态信息,可以避免型态转换时的问题。

使用add()方法可以将一个对象加入ArrayList中,使用size()方法可以传回目前的ArrayList的长度,使用get()可以传回指定索引处的对象,使用toArray()可以将ArrayList中的对象转换为对象数组。

以下是执行结果:

输入名称(quit结束)
# Justin
# caterpillar
# momor
# quit
显示输入: Justin caterpillar momor?

您可以使用get()方法指定索引值取出对象,然而如果您的目的是要循序取出容器中所有的对象,则您可以使用Iterator类,Iterator类实作 Iterator 模式,实际来看个例子:

ArrayListDemo.java
package onlyfun.caterpillar;
import java.util.*;
public class ArrayListDemo {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		List list = new ArrayList();
		System.out.println("输入名称(quit结束)");
		while(true) {
			System.out.print("# ");
			String input = scanner.next();
			if(input.equals("quit"))
			break;
			list.add(input);
		}
		Iterator iterator = list.iterator();
		while(iterator.hasNext()) {
			System.out.print(iterator.next() + " ");
		}
		System.out.println();
	}
}

iterator()方法会传回一个Iterator对象,这个对象提供的遍访的方法,hasNext()方法测试Iterator中是否还有对象,如果 有的话,可以使用next()取出。

事实上,在J2SE 5.0您也不必须使用iterator()了,使用增强的for循环可以直接遍访List的所有元素,例如:

ArrayListDemo.java
package onlyfun.caterpillar;
import java.util.*;
public class ArrayListDemo {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		List list = new ArrayList();
		System.out.println("输入名称(quit结束)");
		while(true) {
			System.out.print("# ");
			String input = scanner.next();
			if(input.equals("quit"))
			break;
			list.add(input);
		}
		for(String s : list) {
			System.out.print(s + " ");
		}
		System.out.println();
	}
}