java - 如何计算两个以上 HashSet 之间的交集?

标签 java intersection hashset retain

考虑到下面的代码以及 4 个 HashSet 在别处填充的事实。

我的目标是包含所有 4 个 HashSet 中共有的所有元素。

我的问题是,首先,我做得对吗?其次,如果我做对了,还有更好的方法吗?如果没有,那么我有什么解决方案来解决这个问题?

static Set<String> one=new HashSet<>();
static Set<String> two=new HashSet<>();
static Set<String> three=new HashSet<>();
static Set<String> four=new HashSet<>();

private static void createIntersectionQrels() {
    ArrayList<String> temp = new ArrayList<>();
    Set<String> interQrels = new HashSet<>();

    temp.addAll(one);
    one.retainAll(two);
    interQrels.addAll(one);
    one.addAll(temp);
    one.retainAll(three);
    interQrels.addAll(one);
    one.addAll(temp);
    one.retainAll(four);
    interQrels.addAll(one);
    one.addAll(temp);

    interQrels.retainAll(two);
    interQrels.retainAll(three);
    interQrels.retainAll(four);
}

最佳答案

我认为您可以简单地在第一组上调用 retainAll(),使用第二、第三和第四组作为参数:

private static Set<String> getIntersectionSet() {
    // create a deep copy of one (in case you don't wish to modify it)
    Set<String> interQrels = new HashSet<>(one);

    interQrels.retainAll(two);     // intersection with two (and one)
    interQrels.retainAll(three);   // intersection with three (and two, one)
    interQrels.retainAll(four);    // intersection four (and three, two, one)

    return interQrels;
}

关于java - 如何计算两个以上 HashSet 之间的交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37802161/

相关文章:

java - 将 java 扫描仪(文件)中的一行转换为数组

javax 父子之间的持久关系。最后一个 child 又是另一个 child 的 parent

java - 检查 2 个矩形是否会重叠

r - 如何计算R中多边形重叠的面积?

java - 如何在另一个 HashSet<String> 中正确传递/添加 HashSet<String> 中的字符串?

java - 如何使用parseInt将字符串转换为整数?

java - JPA的上下文注入(inject)

java - 2个字符串文件的交集 - java

java - 为什么 HashSet 不能直接在内部使用位数组而不是 HashMap 来节省一些空间?

java - 对同一类应用不同的 equals