在 Java 中,“Set 去重最快”取决于数据规模、数据类型和是否可修改原数据。下面从原理 + 实践角度说明。
HashSet(最常见、最快)List<String> list = ...;
Set<String> set = new HashSet<>(list);
List<String> result = new ArrayList<>(set);
为什么快?
equals + hashCode)✅ 90% 场景选它
LinkedHashSetSet<String> set = new LinkedHashSet<>(list);
HashSetTreeSetSet<String> set = new TreeSet<>(list);
HashSet 慢List<String> result = list.stream()
.distinct()
.collect(Collectors.toList());
LinkedHashSet 思路HashSetConcurrentHashMap 去重(最快并发)Set<String> set = ConcurrentHashMap.newKeySet();
Collections.synchronizedSet 快很多| 方式 | 速度 | 是否保序 | 说明 |
|---|---|---|---|
| HashSet | ⭐⭐⭐⭐⭐ | 否 | 最快 |
| LinkedHashSet | ⭐⭐⭐⭐ | 是 | 推荐 |
| TreeSet | ⭐⭐⭐ | 排序 | 较慢 |
| stream.distinct | ⭐⭐⭐⭐ | 是 | 简洁 |
@Override
public boolean equals(Object o) { ... }
@Override
public int hashCode() { ... }
否则 HashSet 去重失效!
最快去重:用
HashSet;要保序用LinkedHashSet;并发用ConcurrentHashMap.newKeySet()。
如果你有:
我可以给你具体最优方案 + 性能测试示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。