Java提供ArrayList类来存储不限定个数的对象。下面是ArrayList中的一些方法。
ArrayList()
创建一个空的线性表
add(o: Object)
在这个线性表的末尾追加一个新元素o
add(index: int, o: Object)
在这个线性表中的特定下标处增加一个新元素o
clear()
从这个线性表中删除所有的元素
contains(o: Object)
如果这个线性表包含元素o则返回true
get(index: int)
返回这个线性表在特定下标处的元素
indexOf(o: Object)
返回这个线性表中第一个匹配元素的下标
isEmpty()
如果这个线性表不包含元素则返回true
lastIndexOf(o: Object)
返回这个线性表中最后一个匹配元素的下标
remove(o: Object)
从这个线性表中删除元素o
size()
返回这个线性表中元素的个数
remove(index: int)
删除指定下标处的元素
set(index: int, o: Object)
设置在特定下标处的元素
下面是使用ArrayList存储对象的一个例子
public class TextArrayList {
public static void main(String[] args) {
java.util.ArrayList cityList = new java.util.ArrayList();
cityList.add("London");
cityList.add("Denver");
cityList.add("Paris");
cityList.add("Miami");
cityList.add("Seoul");
cityList.add("Tokyo");
System.out.println("List size?" + cityList.size());
System.out.println("Is Miami in the list?" + cityList.contains("Miami"));
System.out.println("The location of Denver in the list?" + cityList.indexOf("Denver"));
System.out.println("Is the list empty?" + cityList.isEmpty());
cityList.add(2,"Xian");
cityList.remove("Miami");
cityList.remove(1);
System.out.println(cityList.toString());
for (int i = cityList.size() - 1; i >= 0; i--) {
System.out.print(cityList.get(i) + "");
}
System.out.println();
java.util.ArrayList list = new java.util.ArrayList();
list.add(new Circle4(2));
list.add(new Circle4(3));
System.out.println("The area of the circle?" + ((Circle4)list.get(0)).getArea());
}
}
输出
Is Miami in the list? true
The location of Denver in the list? 1
Is the list empty? false
[London, Xian, Paris, Seoul, Tokyo]
Tokyo Seoul Paris Xian London
The area of the circle? 12.566370614359172
程序使用无参构造方法创建一个ArrayList(第3行),add方法将Object的任一实例加入线性表中。由于String是Object的一个子类,所以字符串可以加入到线性表中。add方法(第4~9行)将一个对象加入到线性表的末尾。所以,在执行完cityList.add("London")(第4行)之后,这个线性表包含[London]
执行完cityList.add("Denver")(第5行)后,这个线性表包含[London,Denver]
在加入Paris、Miami、Seoul和Tokyo之后(第6~9行),这个线性表包含[London,Denver,Paris,Miami,seoul,Tokyo]
调用size()(第10行)返回这个线性表的大小,线性表的当前大小为6.调用contains("Miami")(第11行)检测这个对象是否在这个线性表中。在这种情况下,它返回true,因为Miami在这个线性表中。调用indexOf("Denver")(第12行)返回该对象在线性表中的索引值,这里它的值为1。如果对象不在这个线性表中,它返回-1。isEmpty()方法(第13行)检测这个线性表是否为空。因为当前列表不为空,所以它返回false。
语句cityList.add(2,"Xian")(第14行)在这个线性表的指定下标位置插入一个对象。该语句执行完之后,线性表变成[London,Denver,Xina,Paris,Miami,Seoul,Tokyo]
语句cityList.remove("Miami")(第15行)从线性表中删除该对象。该语句执行后,线性表就变成[London,denver,Xian,Paris,Seoul,Tokyo]
语句cityList.remove(1)(第16行)从线性表中删除指定下标位置的对象,该语句执行后,线性表变成[London,Xian,Paris,Seoul,Tokyo]
第17行的语句相当于
System.out.println(cityList);
方法toString()返回表示线性表的字符串,其形式为[e0.toString(),e1.toString(),...,ek.toString()],这里的e0,e1,...,ek都是线性表中的元素。
方法get(index)(第19行)返回指定下标位置处的对象。
可以像使用数组一样使用ArrayList对象,但是两者还是有很多不同之处。下表列出了它们的异同点。
一旦创建了一个数组,它的大小就确定下来了。可以使用方括号访问数组元素(例如:a[index])。当创建ArrayList后,它的大小为0.如果元素不在线性表中,就不能使用get和set方法。向线性表中添加、插入和删除是比较容易的,而向数组中添加、插入和删除元素是比较复杂的。为了实现这些操作,必须编写代码操纵这个数组。
创建数组、ArrayList | Object[] a =new Object[10] | ArrayList list = new.ArrayList() |
引用元素 | a[index] | list.get(index) |
更新元素 | a[index] = "London"; | list.set(index, "London"); |
返回大小 | a length | list.size() |
添加一个新元素 | list.add("London") | |
插入一个新元素 | list.add(index,"London") | |
删除一个指定下标的元素 | list.remove(index) | |
删除一个特定内容的元素 | list.remove(Object) | |
删除所有元素 | list.clear() |