Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的HashSet冲突_Java_Hashset_Collision - Fatal编程技术网

Java中的HashSet冲突

Java中的HashSet冲突,java,hashset,collision,Java,Hashset,Collision,我有一个Java类的程序,我想使用Hashset来比较文本文档目录。本质上,我的计划是为每篇论文创建一个字符串哈希集,然后将两个论文哈希集添加到一个哈希集中,并找到相同的6字序列数 我的问题是,我必须手动检查并处理冲突,还是Java为我这样做?Java哈希映射/集自动处理哈希冲突,这就是为什么重写equals和hashCode方法很重要的原因。因为集合使用这两者来区分重复条目或唯一条目 还需要注意的是,这些散列冲突对性能有影响,因为同一散列引用了多个对象 public class MyObjec

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


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

Java哈希映射/集自动处理哈希冲突,这就是为什么重写
equals
hashCode
方法很重要的原因。因为集合使用这两者来区分重复条目或唯一条目

还需要注意的是,这些散列冲突对性能有影响,因为同一散列引用了多个对象

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,因此您只需对自己的数据对象执行该操作。

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

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


即使某些字符串具有相同的哈希代码,但不相等,这也无关紧要。

您可以找到答案OK,酷。我读了很多帖子,说HashMaps有内置的冲突处理,但我找不到任何明确说明HashSet有内置的冲突处理的东西。请注意我的编辑:重写hashCode和equals方法很重要,由于集合使用这两种方法来标识重复项,因此必须为放入集合中的对象实现.equals()和hashCode()方法。因为这些都是由集合计算的,以确定它是否是唯一的条目。所以,如果我将一组n长度的字符串放入一个哈希集中,我是否必须检查其哈希代码,如果该哈希代码与已经存在的哈希代码匹配,然后检查它们是否是相同的字符串?编辑:本质上,我是在问我将如何实现这个检查。不,你不需要以任何方式处理字符串的哈希代码-请看我的回答。只有当你将字符串对象添加到集合或其他已经实现哈希代码和等于的对象时,才是真的。如果你有自己的目标,你肯定要实现这两个目标。我想说的是,如果我使用a.addAll(b),是否确定我不会有任何重复项,是否确定a和b中的每个唯一字符串都会存在?@dngfng因此,如果我使用字符串,我不需要检查冲突。我可以将所有字符串放入它们的哈希集中,并确保所有唯一的字符串都在其中,并且没有重复的字符串?不,您永远不必检查冲突,但是如果您有自己的对象,则需要同时实现equals和hashCode,否则它将无法正常工作。通过使用这些方法,哈希集将为您完成实际的冲突检测。@dngfng谢谢。这就是我的想法,但我的教授一直在向我强调,我需要检查碰撞并手动处理。