我々は見つけることができるhashcode
のをlist
、自身が含まれていますかelement
?
私はこれが悪い習慣であることを知っていますが、これは面接官が尋ねたものです。
次のコードを実行すると、がスローされますStackOverflowError
。
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
ここで私は2つの質問があります:
- なぜ
StackOverflowError
ですか? - この方法でハッシュコードを見つけることは可能ですか?
List
インターフェイスの定義hashCode
自体によって、リストのはそのメンバーに依存します。リストが独自のメンバーであることを考えると、ハッシュコードはに依存しますhashCode
。これはhashCode
...に依存します。これにより、無限の再帰が発生し、StackOverflowError
実行されます。ここで問題は、なぜリストにそれ自体を含める必要があるのでしょうか。このような再帰的なメンバーシップを必要とせずに、あなたがしようとしていることをより良い方法で達成できることを保証できます。