Java LinkedList contains() メソッド
contains()メソッドは Java 内LinkedListクラスによって提供される一般的なメソッドで、リンクリストに指定された要素が含まれているかどうかを確認するために使用されます。このメソッドはjava.util.LinkedListクラスに属し、次のクラスから継承していますjava.util.AbstractCollectionクラス。
メソッド構文
public boolean contains(Object o)
戻り値
- リンクリストに指定された要素が含まれている場合は、返す値は
true - 指定された要素が含まれていない場合は、返す値は
false
メソッドの詳細
動作原理
contains()メソッドは、リンクリスト内の各要素を走査し、次を使用しますequals()メソッドで各要素をターゲットオブジェクトと比較します。一致する要素が見つかった場合は、すぐに返しますtrue;リンクリスト全体を走査しても一致する要素が見つからない場合は、返す値はfalse。
時間計算量
なぜならLinkedListは双方向リンクリストであり、contains()メソッドはリンクリストの先頭から順に検索する必要があるため、その時間計算量は O(n) です。ここで n はリンクリスト内の要素数です。
使用例
基本的な使い方
例
public class LinkedListContainsExample {
public static void main(String[] args) {
// LinkedList を作成する
LinkedList<String> fruits = new LinkedList<>();
// 要素を追加する
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 要素が存在するか確認する
System.out.println("Contains Apple? " + fruits.contains("Apple")); // 出力: true
System.out.println("Contains Grape? " + fruits.contains("Grape")); // 出力: false
}
}
カスタムオブジェクトの使用
カスタムオブジェクトを使用する場合、正しくオーバーライドする必要がありますequals()メソッド、そうでなければcontains()メソッドが期待どおりに動作しない可能性があります。
例
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// equals メソッドをオーバーライドする
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
// hashCode メソッドをオーバーライドする
@Override
public int hashCode() {
return 31 * name.hashCode() + age;
}
}
public class CustomObjectExample {
public static void main(String[] args) {
LinkedList<Person> people = new LinkedList<>();
people.add(new Person("Alice", 25));
people.add(new Person("Bob", 30));
Person alice = new Person("Alice", 25);
System.out.println("Contains Alice? " + people.contains(alice)); // 出力: true
}
}
注意事項
1. null 値の処理
LinkedList含むことができますnull値には、次を使用できますcontains(null)リンクリスト内に存在するかどうかを確認するためにnull値。
例
list.add(null);
System.out.println(list.contains(null)); // 出力: true
2. パフォーマンスの考慮
なぜならcontains()メソッドはリンクリストを走査する必要があるため、大きなリンクリストでは、このメソッドを頻繁に呼び出すとパフォーマンスに影響を与える可能性があります。要素の存在を頻繁に確認する必要がある場合は、次の使用を検討できますHashSetなどの検索に適したデータ構造。
3. equals() メソッドの重要性
contains()メソッドは、要素のequals()メソッドでオブジェクト比較を行います。equals()メソッドが等しいオブジェクトを正しく認識できない可能性があります。contains()他のメソッドとの比較
他のメソッドとの比較
contains() vs indexOf()
contains(): int を返し、要素が最初に出現するインデックス位置を返します。存在しない場合は -1 を返しますindexOf()例
例
list.add("A");
list.add("B");
list.add("A");
System.out.println(list.contains("A")); // 出力: 0
System.out.println(list.indexOf("A")); : 単一の要素が存在するかどうかを確認します
contains() vs containsAll()
contains(): 指定されたコレクションのすべての要素が含まれているかどうかを確認しますcontainsAll()例
例
list.add("A");
list.add("B");
list.add("C");
System.out.println(list.contains("A")); // 出力: true
List<String> checkList = Arrays.asList("A", "B");
System.out.println(list.containsAll(checkList)); まとめ
まとめ
LinkedListのcontains()メソッドは
contains()を使用して要素を比較しますequals()カスタムオブジェクトの場合、正しくオーバーライドする必要があります- メソッド
equals()とhashCode()このメソッドの時間計算量は O(n) であり、大きなリンクリストで頻繁に使用するのには適していません。 - 具体的なニーズに応じて選択できます
- などの代替メソッド
indexOf()或containsAll()適切に使用することで
メソッドにより、効果的に管理および操作できますcontains()内のデータ。LinkedListその他の拡張
Java LinkedList