Collection 是 Java 集合框架的頂層介面,主要分為兩大分支:
| 實作類別 | 底層資料結構 | 特點 | 執行緒安全 |
|---|---|---|---|
| ArrayList | 動態陣列 | 查詢快、增刪慢 | 非同步 |
| LinkedList | 雙向鏈結串列 | 增刪快、查詢慢 | 非同步 |
| Vector | 陣列 | 同步、效能較低 | 同步 |
由於 List 擁有索引,因此提供了針對索引操作的專有方法:
add(index, element)、addAll(index, Collection)remove(index)set(index, element)get(index)、subList(from, to)、listIterator()、indexOf(obj)ListIterator 繼承自 Iterator,提供雙向遍歷與修改功能:
hasNext() / next():前向遍歷hasPrevious() / previous():後向遍歷add()、set()、remove():遍歷過程中修改集合ConcurrentModificationException。必須使用迭代器本身的 remove(),或改用 ListIterator 進行增刪改操作。
import java.util.*;
public class ListDemo {
public static void sop(Object obj) { System.out.println(obj); }
public static void basicOperations() {
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
sop("原集合:" + al);
al.add(1, "java09"); // 指定位置新增
sop("get(1):" + al.get(1)); // 取得指定索引元素
sop("indexOf:"+ al.indexOf("java02"));
List sub = al.subList(1, 3); // 取得子列表
sop("subList:" + sub);
}
public static void iteratorDemo() {
ArrayList al = new ArrayList();
al.add("java01"); al.add("java02"); al.add("java03");
ListIterator li = al.listIterator();
while (li.hasNext()) {
Object obj = li.next();
if (obj.equals("java02")) li.set("java006"); // 修改元素
}
// 反向遍歷
while (li.hasPrevious()) {
sop("previous:" + li.previous());
}
sop(al);
}
public static void main(String[] args) {
basicOperations();
iteratorDemo();
}
}
ListIteratorVector 已被 ArrayList 取代,不建議新專案使用