大可制作:QQ群:31564239(asp|jsp|php|mysql)

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<String> list = new ArrayList<String>();

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<String> list = new ArrayList<String>();

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<String> list = new ArrayList<String>();

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();
}
}