標準のJavaライブラリで、2つのリストにまったく同じ要素が含まれているかどうかを確認する最も簡単な方法は何ですか。
2つのリストが同じインスタンスであるかどうかは関係ありません。また、リストのtypeパラメータが異なっていても関係ありません。
例えば
List list1
List<String> list2;
// ... construct etc
list1.add("A");
list2.add("A");
// the function, given these two lists, should return true
おそらく私が知っている顔に私を見つめている何かがあるでしょう:-)
編集:明確にするために、正確に同じ要素と要素の数を順番に探していました。
順序を気にする場合は、equalsメソッドを使用します。
list1.equals(list2)
javadocから:
指定されたオブジェクトがこのリストと等しいかどうかを比較します。指定されたオブジェクトもリストであり、両方のリストのサイズが同じで、2つのリストの対応する要素のペアがすべて等しい場合にのみ、trueを返します。((e1 == null?e2 == null:e1.equals(e2))の場合、2つの要素e1とe2は等しいです。つまり、同じ順序で同じ要素が含まれている場合、2つのリストは等しいと定義されます。 。この定義により、equalsメソッドがListインターフェースのさまざまな実装にわたって適切に機能することが保証されます。
順序に関係なくチェックしたい場合は、すべての要素をセットにコピーし、結果のセットで等号を使用できます。
public static <T> boolean listEqualsIgnoreOrder(List<T> list1, List<T> list2) {
return new HashSet<>(list1).equals(new HashSet<>(list2));
}
このアプローチの制限は、順序だけでなく重複要素の頻度も無視することです。たとえば、list1
["A"、 "B"、 "A"]であり、list2
["A"、 "B"、 "B"]の場合、Set
アプローチはそれらが等しいと見なします。
順序に敏感ではないが重複の頻度に敏感である必要がある場合は、次のいずれかを実行できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加