Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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 由于哈希冲突,哈希集是否安全_Java_Hash_Hashset_Hashcode_Sha256 - Fatal编程技术网

Java 由于哈希冲突,哈希集是否安全

Java 由于哈希冲突,哈希集是否安全,java,hash,hashset,hashcode,sha256,Java,Hash,Hashset,Hashcode,Sha256,我的问题是,它是否总是处理哈希冲突?如果哈希完全相同,它如何确切地知道对象是不同的?他们是否检查了equals,如果是这样,这就不符合散列的意义了 与sha256相比,sha256对于我正在制作的程序几乎没有哈希冲突,如果我对字符串使用hashset,它会出错吗?String.hashCode()相互冲突的可能性有多大?比如,如果contains和add方法似乎都没有检查散列,为什么要使用散列?相等的散列代码并不意味着对象相等。根据托收合同, 如果两个对象相等,则它们应该具有相同的哈希代码,反之

我的问题是,它是否总是处理哈希冲突?如果哈希完全相同,它如何确切地知道对象是不同的?他们是否检查了equals,如果是这样,这就不符合散列的意义了


与sha256相比,sha256对于我正在制作的程序几乎没有哈希冲突,如果我对字符串使用hashset,它会出错吗?String.hashCode()相互冲突的可能性有多大?比如,如果contains和add方法似乎都没有检查散列,为什么要使用散列?

相等的散列代码并不意味着对象相等。根据托收合同, 如果两个对象相等,则它们应该具有相同的哈希代码,反之亦然

集合(如set和map)中的对象是否存在哈希冲突并不重要,它们将正常工作,直到equals方法能够区分对象。
尽管性能可能会降低,因为如果所有哈希相同,集合将有效地降低为列表。

哈希集合和哈希映射的哈希冲突是预期的,也是允许的。这就是为什么对于可散列对象,几乎总是覆盖
equals
hashCode
。Crypographic哈希(如sha256)对于不同的目的来说是完全不同的。请查看以下内容:,尤其是“冲突解决”部分。还有以下内容:
    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