Java ArrayList
ArrayList 的增删改查、遍历、扩容机制与常用方法。
创建与添加
new ArrayList<>() creates an empty list; add(e) appends and add(i, e) inserts. Put the element type in the generic brackets — omitting it yields Object and forces casts.
import java.util.ArrayList;
import java.util.List;
public class ArrayListAdd {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("c");
list.add(1, "b");
System.out.println(list);
System.out.println(list.size());
System.out.println(list.get(1));
}
}[a, b, c]
3
b访问与修改
get(i) reads by index, set(i, e) replaces and returns the old value, indexOf finds a position and contains tests presence. Out-of-range indices throw IndexOutOfBoundsException.
import java.util.ArrayList;
import java.util.List;
public class ArrayListGet {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
System.out.println(list.get(0));
System.out.println(list.set(0, "z"));
System.out.println(list);
System.out.println(list.indexOf("c"));
System.out.println(list.contains("b"));
}
}a
a
[z, b, c]
2
true删除元素
remove(int) deletes by index and remove(Object) by value. For List<Integer>, remove(1) is treated as an index — use remove(Integer.valueOf(1)) to delete a value.
import java.util.ArrayList;
import java.util.List;
public class ArrayListRemove {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
System.out.println(list.remove(0));
System.out.println(list);
List<Integer> nums = new ArrayList<>(List.of(10, 20, 30));
nums.remove(1);
System.out.println(nums);
nums.remove(Integer.valueOf(10));
System.out.println(nums);
}
}a
[b, c]
[10, 30]
[30]遍历
Three ways: for-each is shortest, an indexed for gives positions, and Iterator allows safe removal. Pick by whether you need the index or deletion.
import java.util.ArrayList;
import java.util.List;
public class ArrayListLoop {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("a", "b"));
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
for (int i = 0; i < list.size(); i++) {
System.out.println(i + ":" + list.get(i));
}
}
}a b
0:a
1:bArrayList 方法
The everyday API: add, get, set, remove, size, isEmpty, contains, indexOf, clear, subList, sort, toArray. Most mutate in place; subList returns a view.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListMethods {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>(List.of(3, 1, 2));
System.out.println(nums.isEmpty());
Collections.sort(nums);
System.out.println(nums);
System.out.println(nums.subList(0, 2));
nums.clear();
System.out.println(nums.isEmpty());
System.out.println(nums.size());
}
}false
[1, 2, 3]
[1, 2]
true
0创建与添加
new ArrayList<>() 创建空列表,add(e) 追加、add(i, e) 插入到指定位置。泛型 <> 里写元素类型,不写就是 Object,取出来要强转。
import java.util.ArrayList;
import java.util.List;
public class ArrayListAdd {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("c");
list.add(1, "b");
System.out.println(list);
System.out.println(list.size());
System.out.println(list.get(1));
}
}[a, b, c]
3
b访问与修改
get(i) 按下标取、set(i, e) 替换并返回旧值、indexOf 找位置、contains 判断存在。下标越界抛 IndexOutOfBoundsException。
import java.util.ArrayList;
import java.util.List;
public class ArrayListGet {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
System.out.println(list.get(0));
System.out.println(list.set(0, "z"));
System.out.println(list);
System.out.println(list.indexOf("c"));
System.out.println(list.contains("b"));
}
}a
a
[z, b, c]
2
true删除元素
remove(int) 按下标删、remove(Object) 按值删第一个匹配。对 List<Integer> 传 remove(1) 会被当成下标而不是值 —— 想按值删要写 remove(Integer.valueOf(1))。
import java.util.ArrayList;
import java.util.List;
public class ArrayListRemove {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
System.out.println(list.remove(0));
System.out.println(list);
List<Integer> nums = new ArrayList<>(List.of(10, 20, 30));
nums.remove(1);
System.out.println(nums);
nums.remove(Integer.valueOf(10));
System.out.println(nums);
}
}a
[b, c]
[10, 30]
[30]遍历
三种遍历方式:for-each 最简洁、下标 for 可以同时拿到索引、Iterator 可在遍历中安全删除。选择取决于是否需要索引或删除。
import java.util.ArrayList;
import java.util.List;
public class ArrayListLoop {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("a", "b"));
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
for (int i = 0; i < list.size(); i++) {
System.out.println(i + ":" + list.get(i));
}
}
}a b
0:a
1:bArrayList 方法
常用方法一览:add、get、set、remove、size、isEmpty、contains、indexOf、clear、subList、sort、toArray。全部返回新值或修改自身,不返回新列表(subList 除外)。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListMethods {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>(List.of(3, 1, 2));
System.out.println(nums.isEmpty());
Collections.sort(nums);
System.out.println(nums);
System.out.println(nums.subList(0, 2));
nums.clear();
System.out.println(nums.isEmpty());
System.out.println(nums.size());
}
}false
[1, 2, 3]
[1, 2]
true
0