11

我有一个用于我的 Java 类的程序,我想在其中使用 hashSets 来比较文本文档的目录。本质上,我的计划是为每篇论文创建一个字符串的 hashSet,然后将其中两个论文 hashSet 一起添加到一个 hashSet 中,并找到相同的 6 字序列的数量。

我的问题是,我是否必须手动检查和处理冲突,还是 Java 会为我这样做?

4

2 回答 2

7

Java Hash Maps/Sets 自动处理 Hash 冲突,这就是为什么覆盖 theequalshashCode方法很重要的原因。因为它们都被 Sets 用来区分重复或唯一的条目。

同样重要的是要注意,这些哈希冲突会影响性能,因为多个对象被同一个哈希引用。

public class MyObject {
private String name;

//getter and setters


public int hashCode() {
   int hashCode = //Do some object specifc stuff to gen hashCode
   return int;
}

public boolean equals(Object obj) {
   if(this==obj) return true;
   if(obj instanceOf MyObject) {
       if(this.name.equals((MyObject)obj.getName())) {
           return true;
       }
   return false;
}
}
}

注意:标准 Java 对象(例如 String)已经实现了 hashCode 和 equals,因此您只需为您自己的数据对象类型执行此操作。

于 2012-10-16T07:15:50.163 回答
0

我认为您没有要求哈希冲突,对吗?问题是当 HashSet a 和 HashSet b 例如通过 a.addAll(b) 添加到单个集合中时会发生什么。

答案是一个将包含所有元素并且没有重复项。对于字符串,这意味着您可以在添加之前使用 a.size() 计算集合中相等字符串的数量 - 在 add + b.size() 之后使用 a.size()。

如果某些字符串具有相同的哈希码但不相等,这甚至无关紧要。

于 2012-10-16T07:27:24.120 回答