java - Java 中两个集合的交集错误

标签 java set intersection

我遇到两个哈希集交集的问题。我不知道为什么一直是0,因此相似度值为0。

无论如何,我发布了涉及 Intersection 的方法。与 union 对应的部分工作正常。我将非常感谢您的帮助。

public <T> double Similarity (Set<T> s1, Set<T> s2){

    if (s1.isEmpty() || s2.isEmpty()){
        return 0.0;
    }
    double similarity;
    int unionValue;
    int intersectionValue;

    intersectionValue=intersection(s1, s2);
    unionValue=union(s1, s2);       
    similarity=(double)intersectionValue/(double)unionValue;

    System.out.println(unionValue+"    "+intersectionValue);
    System.out.println(similarity);

    return similarity;
}



public <T> int intersection (Set<T> s1, Set<T> s2){

    Set<T> intersection = new HashSet<T>(s1);
    intersection.retainAll(s2);
    return intersection.size();
}

public <T> int union (Set<T> s1, Set<T> s2){

    Set<T> union = new HashSet<T>(s1);
    union.addAll(s1);

    for (T apiSwRepo : s2){
        if (union.toString().contains(apiSwRepo.toString())){
        }
        else
            union.add(apiSwRepo);
    }
    return union.size();

}

最佳答案

你的问题在于你的比较。

if (union.toString().contains(apiSwRepo.toString())) {
} else
    union.add(apiSwRepo);

在上面的代码中,您将 Set 转换为 String,然后调用 contains()。相反,您应该在联合本身上使用 .contains() ,如下所示:

if (union.contains(apiSwRepo)) {
} else
    union.add(apiSwRepo);

我还想建议进行如下简化:

union.retainAll(s2);

因为您有两个集合,所以您将从这个简单的语句中获得并集。

关于java - Java 中两个集合的交集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037677/

相关文章:

java - 如何建立一个链表,每个节点都会有一个随机的int值,但是总值sum和节点数会预先固定?

java - Guava Sets.intersection 性能不佳

set - 查找集合列表中的所有超集

linux - 调试输出未正确显示

ios - 获取与一条线相交的所有 View IOS

mysql - 更新交集表,替代删除->插入

graphics - 确定点是否在 3D 三角形内部

java - RMI 服务器异常

java - Textview 搞乱了阿拉伯字母

java - 如何在 JavaFX 中为非英语支持添加 UTF-8?