コレクション - クラス関係図
ナレッジアーキテクチャ
はじめに
コンテナとは、他の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)順に維持する。
参考コンテンツ
- CarpenterLee/JCFInternals GitHub - CarpenterLee/JCFInternals: Java Collections フレームワークの深い理解
関連
-
型に解決できない エラー解決
-
SLF4J: クラス・パスに複数のSLF4Jバインディングが含まれています。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
ジャバアレイ
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Zipファイルの圧縮・解凍にantを使用する
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ
-
java1.8ソースコード ArrayListソースコード解釈
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
Jsoup-Crawlingの動作
-
Junitのユニットテストはjava.lang.Testを報告します。
-
SocketException java.netの4つの例外解決策。
-
セミコロン期待値エラー解決
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
java send https request prompt java.security.cert.について。
-
Javaジェネリックの深い理解