如何计算两组的交集?

use*_*949 188 java intersection set hashset

可能重复:
有效地查找可变数量的字符串集的交集

说,有两个Hashset,如何计算它们的交集?

Set<String> s1 = new HashSet<String>();

Set<String> s2 = new HashSet<String>();

S1 INT S2 ?
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 369

使用retainAll()方法Set:

Set<String> s1;
Set<String> s2;
s1.retainAll(s2); // s1 now contains only elements in both sets
Run Code Online (Sandbox Code Playgroud)

如果要保留集合,请创建一个集合来保存集合:

Set<String> intersection = new HashSet<String>(s1); // use the copy constructor
intersection.retainAll(s2);
Run Code Online (Sandbox Code Playgroud)

的javadocretainAll()说,这正是你想要的:

仅保留此集合中包含在指定集合中的元素(可选操作).换句话说,从此集合中删除未包含在指定集合中的所有元素.如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的交集.

  • 对于希望在另一个集合上使用 retainAll 的任何人,例如具有重复元素的列表,请注意。根据集合的内容,您可以抛出 UnsupportedOperationException,并且它也不会正确过滤频率(它保留左侧多重集中出现的任何和所有值,无论它在右侧多重集中出现多少次)。 (2认同)

Emm*_*l N 43

是的有retainAll检查这个

Set<Type> intersection = new HashSet<Type>(s1);
intersection.retainAll(s2);
Run Code Online (Sandbox Code Playgroud)