Java : LinkedHashSet (順序を保持するセット) - API使用例

LinkedHashSet (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

予測可能な反復順序を持つSetインタフェースのハッシュ表とリンク・リストの実装です。 この実装は、すべてのエントリをまたがる二重のリンク・リストを保持するという点で、HashSetとは異なります。

クラス構成

LinkedHashSet は、ハッシュ表とリンク・リストによる Set の実装です。
リンク・リストを持っているので、要素を追加した順序を保持します。

final var set = new LinkedHashSet<String>();

set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]
System.out.println(set.size()); // 3

System.out.println(set.contains("a")); // true
System.out.println(set.contains("b")); // true
System.out.println(set.contains("X")); // false
final var linkedHashSet = new LinkedHashSet<String>();
linkedHashSet.add("xxx");
linkedHashSet.add("yyy");
linkedHashSet.add("aaa");
linkedHashSet.add("bbb");

// LinkedHashSet : 要素を追加した順番が保持されます。
System.out.println(linkedHashSet); // [xxx, yyy, aaa, bbb]

final var hashSet = new HashSet<String>();
hashSet.add("xxx");
hashSet.add("yyy");
hashSet.add("aaa");
hashSet.add("bbb");

// HashSet : 要素を追加した順番が保持されません。
System.out.println(hashSet); // [aaa, bbb, yyy, xxx]

関連記事:Set(セット)の基本

コンストラクタ

LinkedHashSet ()

デフォルトの初期容量(16)と負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。

final var set = new LinkedHashSet<String>();
System.out.println(set); // []
System.out.println(set.isEmpty()); // true

set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]
System.out.println(set.size()); // 3

LinkedHashSet (int initialCapacity)

指定された初期容量とデフォルトの負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。

初期容量を変えて処理時間を計った例です。
(実行する環境によって変わる可能性があります)

final var set = new LinkedHashSet<String>(10000000);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.164871 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
final var set = new LinkedHashSet<String>(1);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.203662 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);

LinkedHashSet (int initialCapacity, float loadFactor)

指定された初期容量と負荷係数で新しい空のリンク・ハッシュ・セットを構築します。

負荷係数を変えて処理時間を計った例です。
(実行する環境によって変わる可能性があります)

final var set = new LinkedHashSet<String>(16, 0.05f);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.302754 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
final var set = new LinkedHashSet<String>(16, 0.75f);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.220326 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);

LinkedHashSet (Collection<? extends E> c)

指定されたコレクションと同じ要素で新しいリンク・ハッシュ・セットを構築します。

final var c = List.of("a", "b", "c");

final var set = new LinkedHashSet<>(c);
System.out.println(set); // [a, b, c]
System.out.println(set.size()); // 3

メソッド

Spliterator<E> spliterator ()

このセット内の要素に対する遅延バインディングおよびフェイルファスト Spliteratorを作成します。

final var set = new LinkedHashSet<String>();
Collections.addAll(set, "aaa", "bbb", "ccc");
System.out.println(set); // [aaa, bbb, ccc]

final var spliterator = set.spliterator();
spliterator.forEachRemaining(System.out::println);

// 結果
// ↓
//aaa
//bbb
//ccc

HashSetで宣言されたメソッド

add, clear, clone, contains, isEmpty, iterator, remove, size, toArray, toArray

Java API 使用例 : HashSet」をご参照ください。

AbstractSetで宣言されたメソッド

equals, hashCode, removeAll

Java API 使用例 : AbstractSet」をご参照ください。

AbstractCollectionで宣言されたメソッド

addAll, containsAll, retainAll, toArray, toArray, toString

Java API 使用例 : AbstractCollection」をご参照ください。

Collectionで宣言されたメソッド

parallelStream, removeIf, stream, toArray

Java API 使用例 : Collection」をご参照ください。

Iterableで宣言されたメソッド

forEach

Java API 使用例 : Iterable」をご参照ください。

Setで宣言されたメソッド

add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray

Java API 使用例 : Set」をご参照ください。


関連記事

ページの先頭へ