发布于2026-07-08 阅读(0)
扫一扫,手机访问
Ja va 里的集合框架,说来说去,Array、List、Set、Map 这四大家族,几乎天天都要打交道。很多初学者甚至不少老手,常常在选型时犯迷糊:到底什么时候用数组?什么时候用 ArrayList?HashSet 和 TreeSet 又有什么区别?别急,今天咱们就把它们摆到台面上,一张表说清楚。
| 特性 / 操作 | Array(数组) | List(列表) | Set(集合) | Map(映射) |
|---|---|---|---|---|
| 是否有顺序
(Order) |
✅ 有(索引顺序) | ✅ 有(插入顺序) | ❌ HashSet:无序 ✅ LinkedHashSet:插入顺序 ✅ TreeSet:自然/自定义排序 |
❌ HashMap:无序 ✅ LinkedHashMap:插入顺序 ✅ TreeMap:按 key 排序 |
| 是否允许重复 | ✅ 允许 | ✅ 允许 | ❌ 不允许(元素唯一) | ❌ Key 唯一 ✅ Value 可重复 |
| 增 | ❌ 长度固定,仅能赋值 | add(E), add(i, E) | add(E) | put(K, V) |
| 删 | ❌ 无法真正删除 | remove(Object), remove(int) | remove(Object) | remove(Object key) |
| 改 | arr[i] = val | set(int, E) | ❌ 需先删后加 | put(K, V) / replace(K, V) |
| 查 | arr[i] | get(i), indexOf(), contains() | contains() | get(K), containsKey(), containsValue() |
| 常用子类 / 实现类 | - 原生语法: String[] arr = new String[5]; - 工具类: Arrays.asList(...)(返回固定大小 List) |
• ArrayList(最常用) • LinkedList(频繁头尾操作) • Vector(线程安全,已少用) • CopyOnWriteArrayList(并发安全) |
• HashSet(最常用,基于哈希) • LinkedHashSet(保持插入顺序) • TreeSet(自动排序,基于红黑树) |
• HashMap(最常用) • LinkedHashMap(保持插入顺序) • TreeMap(key 自动排序) • ConcurrentHashMap(高并发场景) |
List 里的 remove 方法是个经典陷阱。因为它有 remove(int) 和 remove(Object) 两个重载,当你传入一个数字字面量时,编译器会优先匹配索引版本,结果就跟你预想的不一样了。看看下面这个例子:
Listnums = new ArrayList<>(); nums.add(1); nums.add(2); nums.add(3); // ❌ 错误:想删除值为 1 的元素,但实际删除了索引为 1 的元素! nums.remove(1); // 调用了 remove(int index),删除了 "2" // ✅ 正确:要删除值为 1 的元素,需显式传入 Integer 对象 nums.remove((Integer) 1); // 或 nums.remove(Integer.valueOf(1));
总之,搞清楚每种结构的特性,干活才能不踩坑。数组适合固定大小、频繁随机访问的场景;List 是动态数组的首选;Set 帮你自动去重;Map 则专治键值对映射。按需取用,事半功倍。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8