我々は見つけることができる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実行されます。ここで問題は、なぜリストにそれ自体を含める必要があるのでしょうか。このような再帰的なメンバーシップを必要とせずに、あなたがしようとしていることをより良い方法で達成できることを保証できます。