这个问题在这里已经有答案了:
java中的hashset冲突(2个答案)
上个月关门了。
Set<String> set = new HashSet<>();
set.add("FB");
set.add("Ea");
set.add("G#");
set.add("FB");
for(String s : set)
System.out.println(s.hashCode());
输出:
2236
2236
2236
我的问题是它是否总是处理哈希冲突,如果哈希完全相同,它如何确切地知道对象是不同的?他们是否检查了equals,如果是这样的话,那就不能解决散列的问题。
与sha256相比,sha256对于我正在制作的程序几乎没有哈希集合如果我对字符串使用hashset,它会出错吗?string.hashcode()相互冲突的可能性有多大?比如,如果contains和add方法似乎都没有检查hash,那么它们为什么要使用hash呢?
1条答案
按热度按时间cgyqldqp1#
相等的哈希代码并不意味着对象相等。根据collections约定,如果两个对象相等,则它们应该具有相同的哈希代码,反之亦然。
集合(如set和map)中的对象是否存在哈希冲突并不重要,它们将正常工作,直到equals方法能够区分对象。尽管性能可能会降低,因为如果所有哈希值都相同,set将有效地降低到list。