可能重复:
有效地查找可变数量的字符串集的交集
说,有两个Hashset,如何计算它们的交集?
Set<String> s1 = new HashSet<String>();
Set<String> s2 = new HashSet<String>();
S1 INT S2 ?
Run Code Online (Sandbox Code Playgroud) 在Java中查找两个非稀疏集合的交集大小的最有效方法是什么?这是一个我将大量调用大型集合的操作,因此优化很重要.我无法修改原始集.
我看过Apache Commons CollectionUtils.intersection,看起来很慢.我目前的方法是采用两组中较小的一组,克隆它,然后在两组中较大的一组上调用.retainAll.
public static int getIntersection(Set<Long> set1, Set<Long> set2) {
boolean set1IsLarger = set1.size() > set2.size();
Set<Long> cloneSet = new HashSet<Long>(set1IsLarger ? set2 : set1);
cloneSet.retainAll(set1IsLarger ? set1 : set2);
return cloneSet.size();
}
Run Code Online (Sandbox Code Playgroud) 在最坏的情况下contains,单个查找操作OR 是否O(n)合适?那么,对于n元素的查找hashSet会是O(n^2)什么?
我有两个EnumSet.
EnumSet.of(A1, A2, A3);
EnumSet.of(A3, A4, A5, A6);
Run Code Online (Sandbox Code Playgroud)
我想找到两个集合中存在哪些值.(在这种情况下,A3.)
有没有快速的方法呢?
我需要一个像下面这样的函数,
boolean hasDuplicateValue(HashSet hs1, HashSet hs2) {
// return false;
}
Run Code Online (Sandbox Code Playgroud)
这个线程有效地找到可变数量的字符串集的交集讨论了类似的问题,但是在这个线程中他们还需要交集值,这是我不需要的。因此,它可能会增加我不需要的额外计算复杂性。
例如,
String a = "cat dog monkey";
String b = "cat cow monkey";
String c = "cat dog duck";
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何快速有效的方法在Java中进行,以便找到多个字符串的相交字,在这种情况下将是"cat".
java ×6
hashset ×2
set ×2
collections ×1
enums ×1
enumset ×1
intersection ×1
optimization ×1
performance ×1
string ×1