gpt4 book ai didi

java - 包含自身作为元素的 ArrayList 的哈希码

转载 作者:行者123 更新时间:2023-12-01 06:45:03 25 4
gpt4 key购买 nike

我们能找到hashcode吗?的 list将自身包含为 element ?

我知道这是一个不好的做法,但这是面试官问的。

当我运行以下代码时,它会抛出 StackOverflowError :

public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}

现在我有两个问题:
  • 为什么会有 StackOverflowError ?
  • 是否可以通过这种方式找到哈希码?
  • 最佳答案

    符合的哈希码 List实现 has been specified in the interface :

    Returns the hash code value for this list. The hash code of a list is defined to be the result of the following calculation:

     int hashCode = 1;
    for (E e : list)
    hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());

    This ensures that list1.equals(list2) implies that list1.hashCode()==list2.hashCode() for any two lists, list1 and list2, as required by the general contract of Object.hashCode().



    这并不要求实现看起来完全一样(请参阅 How to compute the hash code for a stream in the same way as List.hashCode() 以获取替代方案),但仅包含其自身的列表的正确哈希码将是一个数字,其中 x == 31 + x必须是 true ,换句话说,不可能计算出一个符合数。

    关于java - 包含自身作为元素的 ArrayList 的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59623418/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com