java中array list set map对比及分析
作者:han_hanker
本文主要讲述了Java中ArrayList、Set、Map的数据结构特性对比以及常用子类或实现类,Array有顺序,允许重复;List有顺序,允许重复;Set无序,不允许重复;Map不保持顺序,key唯一,常用子类有ArrayList、LinkedList、Vector等,HashMap、TreeMap等
java中array list set map对比
| 特性 / 操作 | 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 和 Object 两个重载,传入数字字面量时容易误用:
List<Integer> nums = 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));
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
