我有两套。(来自 Guava HashMultimap.values())。我需要快速查找,如果这两个集合的交集是非空集合。我不需要知道共同的元素,只要有共同的元素。我正在考虑使用 Sets.intersection,但它是 o(m+n),如果我们找到一个公共元素而不必创建整个交集(类似于 set.intersection(set2).any()),我们可以保释。(数据集非常大,这个操作发生在一个循环中,因此性能是最重要的。)
欢迎任何建议。谢谢你。
我有两套。(来自 Guava HashMultimap.values())。我需要快速查找,如果这两个集合的交集是非空集合。我不需要知道共同的元素,只要有共同的元素。我正在考虑使用 Sets.intersection,但它是 o(m+n),如果我们找到一个公共元素而不必创建整个交集(类似于 set.intersection(set2).any()),我们可以保释。(数据集非常大,这个操作发生在一个循环中,因此性能是最重要的。)
欢迎任何建议。谢谢你。
使用普通的JDK,这只是
!Collections.disjoint(set1, set2)
如果发现一个元素是共同的,这将立即失效。
(尽管——就其价值而言——Sets.intersection
比你意识到的更懒惰。它在恒定时间内返回一个视图,并且它的isEmpty()
方法也会在找到第一个共同元素后立即退出,所以它同样有效。)
您可以使用Collection#retainAll()。
仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从这个集合中移除所有不包含在指定集合中的元素。