Skip to content
阅读进度

ArrayList、HashMap、HashSet,在客户端中怎么选? ​

返回 Java 与并发 目录

标准回答 ​

要按顺序展示一批数据,用 List;要凭一个 ID 找到对象,用 Map;只关心有没有重复,用 Set。先看访问方式,再选容器。线程安全也要单独考虑,普通 HashMap 不能随便被多个线程同时修改。

  • HashMap 在哈希分布合理时通常能高效查找;它不承诺按插入顺序遍历。
  • ArrayList 适合按下标读取,头部插入或删除需要移动后续元素。
  • 并发场景可选同步、单线程归属或合适的并发容器;复合操作仍要检查原子性。

通俗例子 ​

车机首页的卡片有顺序,用 ArrayList;用设备 ID 查当前连接状态,用 HashMap;记录已经处理的消息 ID,用 HashSet。若消息很多,去重集合还要按时间淘汰,否则它会一直占内存。

深入解释 ​

**选择依据是操作方式:**ArrayList 适合按顺序和下标访问;HashMap 通过键找值;HashSet 关心是否已有某个元素。它们解决不同访问需求,不只是名字不同。

**并发容器也有边界:**单次 get 和 put 都线程安全,不代表二者中间的业务计算不会被别的线程插入。需要整体一致的操作,应使用适合的原子方法或统一同步。

易混淆点 ​

换成 ConcurrentHashMap 也不会自动让“先读、再改、再写”的整套业务变成原子操作。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。