ArrayList でのオブジェクトの比較: contains() がオブジェクトの同等性を判断する方法
ArrayList にオブジェクトを追加するとき、多くの場合、次の内容が含まれていると想定されます。 () メソッドは、フィールド値のみに基づいてオブジェクトを評価します。ただし、実際のプロセスはそれよりも微妙です。
Java では、ArrayList が実装する List インターフェイスが contains() メソッドのシグネチャを定義します。ドキュメントによると、このメソッドは「このリストに指定された要素が含まれている場合にのみ true を返します」とあります。しかし、リストは 2 つのオブジェクトが同じかどうかをどのように判断するのでしょうか?
equals() の役割
答えは、次のように定義されている equals() メソッドにあります。オブジェクトクラスで。このメソッドは、2 つのオブジェクトを比較し、それらが同じ値を表すかどうかを判断します。 contains() メソッドが呼び出されるとき、内部で equals() メソッドが呼び出され、指定されたオブジェクトがリスト内のいずれかのオブジェクトと一致するかどうかが判断されます。
カスタム オブジェクトの場合はカスタムquals()
具体的な例では、Thing クラスでカスタムのquals() メソッドを定義します。これが必要なのは、デフォルトでは、Object が提供する equals() メソッドがフィールド値ではなくオブジェクト参照を比較するためです。実装では、値フィールドが正しく比較され、2 つの Thing オブジェクトが等しいかどうかが判断されます。
Thing クラスが示されているように実装されていると仮定すると、同一のオブジェクトを検索するときに contains() メソッドは実際に true を返します。以前にバスケットリストに追加されたものに追加されます。これは、2 つのオブジェクトの値フィールドが一致する場合に、equals() メソッドが true を返すためです。
結論
要約すると、ArrayList の contains() メソッドは、 2 つのオブジェクトが等しいかどうかを判断するには、equals() メソッドを使用します。カスタム オブジェクト クラスの場合、オブジェクトの等価性を定義する特定のプロパティに基づいて独自の実装を提供するには、equals() メソッドをオーバーライドする必要がある場合があります。
以上がArrayList の「contains()」メソッドはオブジェクトの同等性をどのように判断するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。