外观
ArrayList、HashMap、HashSet,在客户端中怎么选?
标准回答
要按顺序展示一批数据,用 List;要凭一个 ID 找到对象,用 Map;只关心有没有重复,用 Set。先看访问方式,再选容器。线程安全也要单独考虑,普通 HashMap 不能随便被多个线程同时修改。
- HashMap 在哈希分布合理时通常能高效查找;它不承诺按插入顺序遍历。
- ArrayList 适合按下标读取,头部插入或删除需要移动后续元素。
- 并发场景可选同步、单线程归属或合适的并发容器;复合操作仍要检查原子性。
通俗例子
车机首页的卡片有顺序,用 ArrayList;用设备 ID 查当前连接状态,用 HashMap;记录已经处理的消息 ID,用 HashSet。若消息很多,去重集合还要按时间淘汰,否则它会一直占内存。
深入解释
**选择依据是操作方式:**ArrayList 适合按顺序和下标访问;HashMap 通过键找值;HashSet 关心是否已有某个元素。它们解决不同访问需求,不只是名字不同。
**并发容器也有边界:**单次 get 和 put 都线程安全,不代表二者中间的业务计算不会被别的线程插入。需要整体一致的操作,应使用适合的原子方法或统一同步。
易混淆点
换成 ConcurrentHashMap 也不会自动让“先读、再改、再写”的整套业务变成原子操作。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-J03