1. ホーム
  2. Java

コレクション - クラス関係図

2022-02-24 21:03:55

ナレッジアーキテクチャ

はじめに

コンテナとは、他のJavaオブジェクトを保持することができるオブジェクトのことです。

JDK1.2から始まった*Java Collections Framework(JCF)*は、Java開発者に共通のコンテナを提供しており、その利点は以下の通りです。

  • プログラミングの難易度を軽減
  • プログラム性能の向上
  • API間の相互運用性向上
  • 学習困難の軽減
  • 関連APIの設計・実装の難易度低減
  • プログラムの再利用性向上

Javaコンテナはオブジェクトしか保持できない。基本型(int, long, float, doubleなど)については、コンテナに入れる前にオブジェクト型(Integer, Long, Float, Doubleなど)にラップする必要があります。多くの場合、アンパックとアンラップは自動的に行うことができます。これにより、パフォーマンスとスペースのオーバーヘッドが追加されますが、設計とプログラミングは簡素化されます。

コレクション

コンテナは主にCollectionとMapで、Collectionにはオブジェクトのコレクション、MapにはKey-Valueペア(2つのオブジェクト)のマッピングテーブルが格納される。

セット

ツリーセット

赤黒木の実装に基づき、範囲に基づく要素の検索など、順序付けされた操作をサポートする。しかし、時間計算量O(1)のHashSetや、O(logN)のTreeSetと比較すると、ルックアップの効率は劣る。

ハッシュセット

ハッシュテーブルの実装に基づき、ルックアップをサポートするが、順序付き操作はサポートしない。また、要素の挿入順に関する情報が失われるため、Iterator を使用して HashSet を走査すると不確定な結果になります。

リンクドハッシュセット

HashSetの検索効率を持ち、要素の挿入順序を維持するために双方向の内部連鎖を使用します。

リスト

配列リスト

ランダムアクセスをサポートした動的配列ベースの実装です。

ベクター

ArrayListに似ているが、スレッドセーフである。

リンクリスト

双方向リンクリストの実装に基づき、順次アクセスしかできないが、チェーンの途中で素早く要素を挿入したり削除したりすることができる。また、LinkedListはスタック、キュー、双方向キューとして使用することができる。

キュー

リンクリスト

双方向の待ち行列の実装に利用できる。

PriorityQueue

優先キューを実装するために使用できるヒープベースの構造体実装です。

地図

ツリーマップ

赤黒い木の実装がベース。

ハッシュマップ

ハッシュテーブルの実装をベースとする。

HashTable

つまり、複数のスレッドが同時に HashTable に書き込んでも、データの不整合が発生しません。このクラスはレガシーなクラスなので、使わないでください。ConcurrentHashMapはセグメント化されたロックを導入しているので、ConcurrentHashMapの方が効率的です。

リンクドハッシュマップ

双方向リンクテーブルを使用して、要素の順序を挿入順またはLRU(Least Recently Used)順に維持する。

参考コンテンツ