次のことがどのように可能ですか。
void contains(LinkedHashSet data, Object arg) {
System.out.println(data.getClass()); // java.util.LinkedHashSet
System.out.println(arg.hashCode() == data.iterator().next().hashCode()); // true
System.out.println(arg.equals(data.iterator().next())); // true
System.out.println(new ArrayList(data).contains(arg)); // true
System.out.println(new HashSet(data).contains(arg)); // true
System.out.println(new LinkedHashSet(data).contains(arg)); // true (!)
System.out.println(data.contains(arg)); // false
}
私は何か間違ったことをしていますか?
明らかに、常に発生するとは限りません (単純なオブジェクトのセットを作成しても、それを再現することはできません)。しかし、私の場合、より複雑なクラスの引数を使用すると、常に発生します。
編集:ここで定義しない主な理由は、Eclipse で生成された 20 行と2 倍の長arg
さのかなり大きなクラスだからです。そして、それは関係ないと思います-2つのオブジェクトが等しい限り。hashCode
equals