Java アドバンス

Java LinkedHashSet

Javaの LinkedHashSet は、ユニークな要素(重複のない要素)を格納し、さらにそれらが追加された順序を保持するコレクションです。

このクラスは java.util パッケージに含まれており、Set インターフェースを実装しています。

       ヒント: 重複を許さず、かつ元の挿入順序を維持したいセットが必要な場合は、LinkedHashSet を使用してください。

1. LinkedHashSet の作成

文字列を格納する cars という名前の LinkedHashSet オブジェクトを作成する例です。

1.1 作成の例

import java.util.LinkedHashSet; // LinkedHashSet クラスをインポート

LinkedHashSet<String> cars = new LinkedHashSet<>();

これにより、add()contains()remove() といったメソッドを使用してコレクションを操作できるようになります。

2. 要素の追加

LinkedHashSet に要素を追加するには、add() メソッドを使用します。

2.1 追加のコード例

import java.util.LinkedHashSet;

public class Main {
  public static void main(String[] args) {
    LinkedHashSet<String> cars = new LinkedHashSet<>();
    cars.add("Volvo");
    cars.add("BMW");
    cars.add("Ford");
    cars.add("BMW");  // 重複要素
    cars.add("Mazda");

    System.out.println(cars);
  }
}

出力結果: 要素は追加された順序で表示されます(例: [Volvo, BMW, Ford, Mazda])。
注意: "BMW" のような重複した値は無視されます。

3. 要素の存在確認

特定の要素が存在するかどうかを確認するには、contains() を使用します。

3.1 存在確認の例

cars.contains("Mazda");

4. 要素の削除

要素を削除するには、remove() を使用します。

4.1 削除の例

cars.remove("Volvo");

5. 全要素の削除

すべての要素を削除するには、clear() を使用します。

5.1 クリアの例

cars.clear();

6. LinkedHashSet のサイズ

セット内にいくつのユニークな要素があるかをカウントするには、size() を使用します。

6.1 サイズ取得の例

cars.size();

注意: 重複した値はカウントされません。サイズにはユニークな要素のみが含まれます。

7. LinkedHashSet のループ処理

for-each ループを使用して、LinkedHashSet の要素を順次処理できます。

7.1 ループの例

LinkedHashSet<String> cars = new LinkedHashSet<>();
// 要素を追加...
for (String car : cars) {
  System.out.println(car);
}

8. HashSet と LinkedHashSet の比較

特徴HashSetLinkedHashSet
順序順序は保証されない挿入順序が保持される
重複許容されない許容されない
パフォーマンス高速やや低速(順序を追跡するため)

       ヒント: ユニーク性と速度だけを重視する場合は HashSet を使用してください。順序が重要な場合には LinkedHashSet を使用します。

9. var キーワード

Java 10 以降では、型を2回書かずに var キーワードを使用して LinkedHashSet 変数を宣言できます。コンパイラは代入された値から型を推論します。

これによりコードが短くなりますが、可読性のためにフルタイプ(完全な型名)を好む開発者も依然として多くいます。var は有効な Java の構文であるため、他のコードで見かけることもあるでしょう。存在を知っておくことが重要です。

9.1 var を使用した例

// var を使用しない場合
LinkedHashSet<String> cars = new LinkedHashSet<String>();

// var を使用する場合
var cars = new LinkedHashSet<String>();

10. Set インターフェース

注意: Java のコードでは、次のように SetLinkedHashSet の両方が使われているのをよく目にします。

10.1 インターフェースを用いた宣言例

import java.util.Set;
import java.util.LinkedHashSet;

Set<String> cars = new LinkedHashSet<>();

これは、変数(cars)が Set(インターフェース)として宣言され、そこに LinkedHashSet オブジェクト(実際のセット)を格納していることを意味します。LinkedHashSetSet インターフェースを実装しているため、このような記述が可能です。