Java 集合框架中 List 与 Set 的区别及使用场景
摘要: 对比 ArrayList 与 HashSet 的特性,分析在不同业务场景下的选型依据。
正文:
在日常编码中,经常纠结到底该用 List 还是 Set。今天做个简单的梳理。
| 特性 | List (ArrayList) | Set (HashSet) |
|---|---|---|
| 有序性 | 有序(按插入顺序) | 无序 |
| 重复性 | 允许重复元素 | 不允许重复元素 |
| null值 | 允许多个 null | 只允许一个 null |
| 查找效率 | 按索引快 O(1),按对象慢 O(n) | 查找快 O(1) |
场景分析
- 购物车:商品可能有多个相同的(数量不同),使用
List。 - 抽奖黑名单:需要去重,且只关心是否存在,使用
HashSet。 - 历史搜索记录:需要去重且保留最近的顺序,可以考虑
LinkedHashSet。
思考:数据结构的选型直接影响程序的性能和逻辑清晰度,不能一概而论。