Java の TreeSet の実装の仕組
Java TreeSet は赤黒木に基づいた、順序付けされたコレクションのデータ構造です。
赤黒木は、各ノードに格納ビットを追加することで実現される自己調整二分探索木です。この追加ビットは通常、色(赤色または黒色)と呼ばれます。根から葉への任意のパス上の各ノードの色付け方法を制限することで、赤黒木はどのパスも他のパスよりも2倍長くならないように保証しており、これにより赤黒木の全体的な効果はほぼバランスが取れています。
TreeSetは要素を格納するために赤黒木を使用し、要素の順序を保持します。その特徴として、
- 要素は整列されています。TreeSet の要素は自然な順番で、または指定された Comparator で整列されています。
- 要素はユニークです。つまり、TreeSetには重複要素が含まれないため、同じ要素は1度しか保存されません。
- 高速な挿入・削除・検索操作をサポート:赤黒木の自己平衡性は、これらの操作に対してO(log n)という時間計算量を保証しています。ここで、nは集合のサイズを表します。
- スレッドセーフではない: TreeSetはスレッドセーフではなく、複数のスレッドがTreeSetに同時にアクセスし、少なくとも1つのスレッドがコレクションの構造を変更した場合、外部同期を行う必要があります。
Java TreeSetは赤黒木による実装された順序集合で、挿入、削除、検索の高速な操作を提供し、要素の順序と一意性を保持します。