集合框架¶
第 06 章说过:Java 数组是定长的。实际开发 99% 用的是集合。三个主角:List、Set、Map。
三大集合¶
| Java | 对标 JS | 特点 |
|---|---|---|
List (ArrayList) |
Array |
有序、可重复、按下标访问 |
Set (HashSet) |
Set |
不重复 |
Map (HashMap) |
Map / 对象 |
键值对,键不重复 |
List¶
List<String> list = new ArrayList<>(); // 接口 + 实现类
list.add("Tom"); // 末尾添加
list.get(0); // 按下标取
list.remove("Tom"); // 删除
list.size(); // 长度(方法,不是属性)
list.contains("Tom"); // 是否包含
为什么写 List 不是 ArrayList
List 是接口,ArrayList 是实现。变量声明用接口类型(List),new 用实现(ArrayList)。这样以后想换实现(如 LinkedList)只改一行。这是"面向接口编程",Spring 里到处都是。
Set¶
用途:去重、判断"是否属于某集合"。
Map¶
Map<String, Integer> map = new HashMap<>();
map.put("Tom", 18); // 存
map.get("Tom"); // 取,返回 18
map.containsKey("Tom"); // 是否有这个 key
map.put("Tom", 19); // 同 key 覆盖
// 遍历(JS 是 for (const [k,v] of map))
for (Map.Entry<String, Integer> e : map.entrySet()) {
e.getKey(); e.getValue();
}
★ 前端人注意¶
- 集合的
size()是方法(带括号),不是属性。list.size()不是list.length。 Map不能用[]取值,必须map.get(key)。它不是 JS 对象。- 遍历
Map用entrySet(),没有直接for...of。
完整可运行示例¶
package com.javaglm.language.ch13;
import java.util.*;
/**
* 第 13 章 · 集合框架。
* 最重要的三个:List(有序可重复)、Set(不重复)、Map(键值对)。
* 对标 JS:List≈Array、Set≈Set、Map≈Map。注意 Java 用接口 + 实现类两层。
*/
public class CollectionDemo {
public static void main(String[] args) {
// === List:有序、可重复 —— 对标 JS Array ===
List<String> list = new ArrayList<>(); // 接口 List,实现 ArrayList(动态数组)
list.add("Tom");
list.add("Jerry");
list.add("Tom"); // 允许重复
System.out.println(list); // [Tom, Jerry, Tom]
System.out.println("get(0) = " + list.get(0));
list.remove("Tom"); // 删第一个匹配
System.out.println("size = " + list.size());
// === Set:不重复 —— 对标 JS Set ===
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("a"); // 重复被忽略
System.out.println("set = " + set + " size = " + set.size());
// === Map:键值对 —— 对标 JS Map / 对象 ===
Map<String, Integer> map = new HashMap<>();
map.put("Tom", 18);
map.put("Jerry", 20);
map.put("Tom", 19); // 同 key 覆盖
System.out.println("Tom 年龄 = " + map.get("Tom")); // 19
System.out.println("包含 Jerry? " + map.containsKey("Jerry"));
// 遍历 Map:用 entrySet(JS 里是 map.entries())
for (Map.Entry<String, Integer> e : map.entrySet()) {
System.out.println(e.getKey() + " => " + e.getValue());
}
}
}
:octicons-arrow-left-16: 上一章:枚举与包装类 | 下一章:泛型