商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > java中arraylistsetmap对比及分析

java中arraylistsetmap对比及分析

  发布于2026-07-08 阅读(0)

扫一扫,手机访问

Ja va 里的集合框架,说来说去,Array、List、Set、Map 这四大家族,几乎天天都要打交道。很多初学者甚至不少老手,常常在选型时犯迷糊:到底什么时候用数组?什么时候用 ArrayList?HashSet 和 TreeSet 又有什么区别?别急,今天咱们就把它们摆到台面上,一张表说清楚。

ja va中array list set map对比

特性 / 操作 Array(数组) List(列表) Set(集合) Map(映射)
是否有顺序

ja va中arraylistsetmap对比及分析

(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) 两个重载,当你传入一个数字字面量时,编译器会优先匹配索引版本,结果就跟你预想的不一样了。看看下面这个例子:

List 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));

总之,搞清楚每种结构的特性,干活才能不踩坑。数组适合固定大小、频繁随机访问的场景;List 是动态数组的首选;Set 帮你自动去重;Map 则专治键值对映射。按需取用,事半功倍。

本文转载于:https://www.jb51.net/program/363193ean.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注