【发布时间】:2019-10-10 10:01:28
【问题描述】:
在Something like 'contains any' for Java set? 有几个解决方案
- Collections.disjoint(A, B)
- setA.stream().anyMatch(setB::contains)
- Sets.intersection(set1, set2).isEmpty()
- CollectionUtils.containsAny()
我的情况 set1 是 new ConcurrentHashMap<>().keySet() 而 set2 是 ArrayList
set1 最多可包含 100 个条目,set2 少于 10 个
或者他们都会做同样的事情并且表现相似?
【问题讨论】:
-
你可以做一个基准测试,你会知道哪一个在你的场景中表现更好。在我看来,
Collections.disjoint(A, B)应该是首选,因为它内置于 Java 的集合框架中。 -
有趣的问题。附加问题:
setB.stream().anyMatch(setA::contains)不会比setA.stream....表现更好吗?我的理解是contains在 Set 上的 O(1) 与列表上的 O(n) 中执行。因此,迭代 10 次并在 100 个元素上检查contains比迭代 100 次并在列表中检查contains更好。
标签: java