如何查找ArrayList的HashCode?

问题描述 投票:2回答:1

我们能否找到list的Hashcode,它包含自身作为元素?

我知道这是一种不良做法,但这是面试官要求的。

[当我尝试运行此代码时,它抛出StackOverflowError

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

现在有两个问题:

  1. 为什么有StackOverflowError
  2. 是否可以通过这种方式找到哈希码?
java java-8 stack-overflow
1个回答
3
投票

检查hashCode类中AbstractList方法的实现。

public int hashCode() {
    int hashCode = 1;
    for (E e : this)
        hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
    return hashCode;
}

对于列表中的每个元素,此调用hashCode。在您的情况下,列表本身就是唯一的元素。现在,此呼叫永无止境。该方法递归调用自身,直到遇到stackoverflow错误。

© www.soinside.com 2019 - 2024. All rights reserved.