List 是有序、可重复的集合,按索引访问。最常用的是 ArrayList。
1. 为什么用集合而不是数组
数组长度固定,集合长度可动态变化。
1 2 3 4 5
| int[] arr = new int[3];
List<String> list = new ArrayList<>();
|
2. 常用操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import java.util.ArrayList; import java.util.List;
public class ListDemo { public static void main(String[] args) { List<String> list = new ArrayList<>();
list.add("Java"); list.add("Python"); list.add("C++"); System.out.println(list);
System.out.println(list.get(0)); System.out.println(list.get(2));
System.out.println(list.size());
System.out.println(list.contains("Java"));
list.set(1, "Go"); System.out.println(list);
list.remove(0); System.out.println(list);
list.remove("C++"); System.out.println(list);
System.out.println(list.isEmpty()); } }
|
3. 遍历 List
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import java.util.ArrayList; import java.util.List;
public class ListTraverseDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++");
for (int i = 0; i < list.size(); i++) { System.out.println(i + ": " + list.get(i)); }
for (String s : list) { System.out.println(s); }
list.forEach(s -> System.out.println(s)); } }
|
4. ArrayList 和 LinkedList 的区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
public class ListImplDemo { public static void main(String[] args) { List<String> arrayList = new ArrayList<>(); List<String> linkedList = new LinkedList<>();
arrayList.add("A"); linkedList.add("B"); } }
|
| 对比项 |
ArrayList |
LinkedList |
| 底层结构 |
动态数组 |
双向链表 |
| 随机访问 get |
快(O(1)) |
慢(O(n)) |
| 插入/删除中间元素 |
慢 |
快 |
| 适用场景 |
读多写少 |
频繁增删 |
绝大多数情况用 ArrayList 就够了。
5. 包装类的 List
List 的泛型必须是对象类型,基本类型要用包装类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import java.util.ArrayList; import java.util.List;
public class IntListDemo { public static void main(String[] args) {
List<Integer> list = new ArrayList<>(); list.add(10); list.add(20); list.add(30);
int sum = 0; for (int n : list) { sum += n; } System.out.println(sum); } }
|
小结
List 有序可重复,按索引访问
- 常用方法:
add get size remove contains set isEmpty
- 默认用
ArrayList,基本类型要写包装类 Integer