【问题标题】:HashSet Collisions in JavaJava中的HashSet冲突
【发布时间】:2012-10-06 05:39:25
【问题描述】:

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

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

【问题讨论】:

  • 你可以找到你 ans here

标签: java hashset collision


【解决方案1】:

Java Hash Maps/Sets 自动处理 Hash 冲突,这就是为什么重写 equalshashCode 方法很重要。因为它们都被 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;
}
}
}

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

【讨论】:

  • 好的,很酷。我读过很多帖子说 HashMaps 具有内置的冲突处理,但我找不到任何具体说明 HashSets 具有内置的冲突处理的内容。
  • 请注意我的编辑:重写 hashCode 和 equals 方法很重要,因为这两个方法都被 Sets 用来识别重复项。
  • 那么您将不得不为您放入集合中的对象实现 .equals() 和 hashCode() 方法。因为这些是由集合评估以确定它是否是唯一条目。
  • 所以,如果我将一堆 n 长度的单词字符串放入一个哈希集中,我是否必须检查它的 hashCode,如果该 hashCode 匹配一个已经存在的 hashCode,那么检查它们是否是相同的字符串?编辑:本质上,我是在问我要什么/如何实施这项检查。
  • 不,您不需要以任何方式摆弄字符串的 hashCode - 请参阅我的答案
【解决方案2】:

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

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

即使某些字符串具有相同的哈希码但不相等也没关系。

【讨论】:

  • 只有当你将 String 对象添加到 Set 或其他已经实现 hashCode 和 equals 的对象时才会如此。如果你有自己的对象,你肯定必须同时实现它们。
  • 那种。我的意思是,如果我执行 a.addAll(b),是否可以肯定我不会有任何重复项,并且是否可以肯定 a 和 b 中的每个唯一字符串都会存在?
  • @dngfng 所以如果我使用字符串,我不需要检查冲突。我可以将所有字符串放入它们的 hashSets 中,并确保其中的所有内容都是唯一的,并且没有重复项?
  • 不——你永远不必检查冲突,但如果你有自己的对象,你需要同时实现 equals 和 hashCode ,否则它将无法正常工作。 HashSet 使用这些方法为您完成实际的碰撞检测。
  • @dngfng 谢谢。我就是这么想的,但我的教授一直向我强调我需要检查碰撞并手动处理它们。
猜你喜欢
  • 1970-01-01
  • 2017-10-29
  • 2022-11-14
  • 2012-12-23
  • 1970-01-01
  • 2020-09-05
  • 2021-11-30
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多