まず、定義セット
コレクション:Aは、1つまたは複数の参照データの種類、及び容器の可変長を格納するためのコンピュータです。
拡張子:リスト収集、キューのコレクション、コレクションセット
第二に、コレクションの様々なタイプの特性
リスト・コレクション(Collectionインタフェースを継承):秩序ストレージ再利用可能な要素
エピタキシャル:ArrayListのコレクション、ベクトルの集合、LinkedListのコレクション
ArrayListのコレクション:ベースアレイが実装、可変長を、そして連続したメモリ空間割り当てリストコレクションのを。特長:非同期スレッド、スレッドセーフな、高効率 のランダムアクセスと高効率の要素をトラバース
ベクトルコレクション:に基づいて、アレイの実現の同時スレッドレガシーコレクションクラス。特長:スレッド同期、マルチスレッドセーフ、効率が低いです
LinkedListの収集:リストは、インタフェースリスト及びキューインタフェースのセットを可能にする、記憶されています。 挿入、削除要素をより効率的に
LinkedListの実装リスト、のDeque、キュー・インターフェース
機会を利用して、リストコレクション実装クラス:
要素への高速アクセスを必要とし、使用のArrayListコレクションを。
すぐに要素を挿入し、削除するための要件、使用のLinkedListのコレクション。
マルチスレッドの要素を操作するとき、使用ベクターコレクションを。
必要なデータが進んでいる場合には、使用してスタックのコレクションクラスを。
キューセット(コレクションインタフェース継承されます)(FIFOキュー):保存するための 再利用可能な要素、 FIFOのセットを。(のみ削除操作は、テーブルの前端部、及びテーブルの後端のテーブルに線形インサートに許容されます )
キュークラスインタフェース:LinkedListの、優先度つきキュー
一般的なデータ構造:
セットコレクション(コレクションインタフェースの継承):ランダムな非繰り返し要素収納セット(要素のインデックスを経由してアクセスされません)
実装クラス:HashSetの収集、LinkedHashSetの収集、TreeSetのコレクション
HashSetのセット:ハッシュテーブル前(jdk1.8ベースの版:=ハッシュ表の配列リスト+
赤黒木(増加検索速度)のハッシュテーブルは=リンクされたリストまたはハッシュテーブルの配列= + +配列:jdk1.8バージョン後
)コレクションセット。
8までの鎖長は、アレイ64の長さに達すると、リストは赤黒木に変換されます。
ノードの赤黒木転送鎖エピトープの最小数は6タブ。
HashSetのステップを保存する設定します。
アドレスが(ハッシュコード()メソッド)が格納されているように1は、ハッシュ値を使用して、要素に対応するハッシュアルゴリズムを用いてハッシュ値を算出します
このハッシュ値2要素の位置が対応するか否かが判断されます
この要素なし3.位置に格納されています
この方法は、ストレージに等しくない、上側要素とが等しくない場合、2つのオブジェクトが等しいかどうかを判定する等しくを使用4.場合
要素の格納位置を得るためのハッシュコード()をオーバーライド
2つの要素を比較するためのオーバーライド等号()は、同じ位置に同じであるときに、2つの要素
Entityクラスは、二つ以上の繰り返しオブジェクトを追加するメソッドをオーバーライドすることを回避します
LinkedHashSetの収集:二重リンクリストやハッシュテーブルに基づいて、HashSetのセットからのコレクションを継承しています。
注文入力を維持するために、リストを使用
TreeSetのコレクション:に基づいて赤黒木、道具セットのインタフェースと、ソート機能を設定し、コレクションの。
エンティティクラスを実装するComparableインタフェースの必要性はTreeSetのソート
Comparableインタフェース:原因実装クラス自体は、そのオブジェクトのインターフェイスのための自然の比較規則のいくつかの並べ替えを含んでいます。
自然順序付け:実装インターフェイスは、この照合処理でアルゴリズムを指定して、その同等のcompareTo(オブジェクトobj)メソッドを達成することをカスタムクラスを必要とします。
パブリック クラス学生実装匹敵{ 公共 のint のcompareTo(学生O){//オーバーライド比較方法は、整数値を返す 返す この .age - o.ageを; //結果が否定である、O前方物体
//結果が肯定的です番号、オブジェクトOの背後
//結果2つのオブジェクトが等しいことを示し、0
//戻さ年齢差、若いトップに記載
}
}
2つのオブジェクトが同じ年齢に挿入された場合は、//、その後、名前でソートされた
公共の クラスの学生が実装匹敵する{ 公共 のint のcompareTo(学生O){ IF(この .age == o.age) を返す この.name.compareToを(o.name ); 戻り 、この .ageを- o.age; } }
コンパレータコンパレータ: 外部カスタム比較ルールそのデータコンテナを格納するためのカスタムは、注文したオブジェクトを。
カスタム並べ替え:実装インターフェイスと、このプロセスにおけるXX特性アルゴリズムソーティング基づいてCompartor比較する(オブジェクトarg0に、オブジェクトARG1)メソッドをオーバーライドすることがカスタムクラスを必要とします。また、コンパレータの一種として知られています。
カスタムコンパレータ(注)を使用する場合:コンパレータをコンストラクタTreeSetの引数として
//创建比较器类MyComparator
パブリック クラス MyComparatorの実装コンパレータ{ 公共 のint 比較(オブジェクトarg0に、オブジェクトARG1){ 学生O1 = (学生)arg0に。 学生O2 = (学生)ARG1。 もし(o1.getAge()== o2.getAge()) を返す o1.getName()のcompareTo(o2.getName())。
リターン o1.getAge() - o2.getAge(); } }
TreeSetの<学生> SET = 新しい新しい TreeSetの<学生>(新新MyComparator()); //パラメータTreeSetのコンストラクタとしてコンパレータ set.add(新新学生である( "ジョーカー"、18)); set.add(新しい新学生( "偽物"、16)); set.add(新しい新しい学生( "空"、23である)); set.add(新しい新しい学生( "ペター"、23である)); のための(学生S:SET){ システム.out.println(S); }
シーンのコレクションを使用して設定します。
必要なデータが入手できない場合はHashSetのを繰り返し、順不同のセット。
必要なデータを繰り返すことはできませんし、ソートされ、空のセットTreeSetのことを選択することができない場合には
:設定されたマップにコンテナフレームをキー値記憶素子の形態で容器。
実装クラス:HashMapの、TreeMapを、ハッシュテーブル
HashMapのコレクション:に基づいて、ハッシュテーブルを達成するために、スレッドセーフ地図コンテナ内
実装クラス:のLinkedHashMap
HashSetのHashMapの底が達成されます。
出力HashMapのトラバーサル方法:
keySet()は、すべてのキーのコレクションを取得します。
値()は、すべての価値があるのコレクションを取得します。
出力へのエントリ()トラバーサルキー
注: HashMapの「追加キー=カスタムオブジェクトの要素を設定し、オブジェクトはhashCode()およびequals()メソッドをオーバーライドする必要があります
ハッシュマップ:キーがnullになることができ、かつ唯一のキー、値はNULLにすることができ、その値は、スレッドセーフで、複数を繰り返すことができます
LinkedHashMapコレクションは:から継承されたHashMapに基づいて、アクセス二重リンクリスト命じ地図容器のを。(+二重には、リスト、ハッシュテーブルをリンク)
特長:LinkedkedHashSet実装があるのLinkedHashMap
LinkedHashMapはハッシュマップのあるサブクラス ;しかし、複数のストランドハッシュマップは、格納順序のために要素を追加しました。
唯一のキー、値がキー値は添加の順序と一致し、空のスレッドセーフな出力順序することができ、一意ではありません。
Hashtableのコレクション:に基づいて、ハッシュテーブルを達成するために、スレッドセーフ地図容器の。
特長:キー、ユニークな値が一意でないキー値は、スレッドセーフ空ではありません
TreeMapのコレクション:に基づいて赤黒木の持つ、実装ソート機能地図コンテナを。(そのファンクションキー自然順序付けによれば、オブジェクトの作成に設けられたコンパレータに従ってソートされました)
特長:TreeSetの基礎となるのTreeMapが実装されています
唯一のキーは、キーの値は、ソートの非スレッドセーフキーがnullではないかもしれないではありません
注:比較ルールはトラバーサルをカスタマイズする(1.クラスを作成することを実装するコンパレータコンパレータ2.TreeMap <人、文字列> T =新しいTreeMapの<人、文字列>(新しいMyComparator());)
使用の地図コレクション:
あなたが店に必要がある場合は、キーと値のペアは、優先HashMapの障害です。
あなたは、キーストレージキーを押す必要がある場合のTreeMapをソートするために選択することができます。
キー値ペアを格納する必要が中に挿入されて保持されると、順次のLinkedHashMapを選択しました。
スレッドの同期を必要とする、Hashtableのが好ましいです。
第三に、反復子(イテレータ)
一般的な方法:
デモ:
配列イテレータ要素の第一セットへのポインタを取得するイテレータ()を呼び出します。
要素がある場合のhasNext循環コール()メソッドは、真を返します。
サイクルにおいて、次の()メソッドは、要素の次のセットを取得します。
ArrayListの犬= 新しいのArrayList <犬> (); 反復子 <犬>それ= dogs.iterator()。 一方、(it.hasNext()){ System.out.printlnは(it.next())。 }
反復子イテレータ(リスト反復子):
反復装置に基づいて新たな反復子は、それがhasprevious()と前回()メソッドを追加して、前方に横断することができます。双方向の機能は、リストを横断しています。
イヌArrayListの新しい新しい=のArrayList <犬>(); ..... dogs.add(ououDog); dogs.add(yayaDog); dogs.add(meimeiDog); dogs.add(feifeiDog); 反復子<犬> = ITER dogs.listIterator(); のSystem.out.println(「正面から背面への出力:」); 一方(iter.hasNext()){次の要素があるか否かを判断 iter.next()=犬の犬は、下部横断要素 System.out.printの( "\ T" +犬+ "\ N-"); } のSystem.out.println( "前へ戻ってから\ N-出力:"); 一方(iter.hasPrevious()){かどうかを決定します前部要素 犬の犬= iter.previous();前部要素トラバーサル System.out.printの(+犬+ "\ N-" \ "T"); }
foreachの使用:
(T要素タイプ要素変数x:トラバースオブジェクトobj)のために{X、ステートメントは、Javaを引用し、??}
(犬の犬:イヌ)のための{ System.out.print( "\ T" +犬+ "\ n");
// foreachのは、一般的に、コレクションをトラバースするために使用します!
}
foreachのが特徴。
新機能のJava5、便利なコレクションのための配列を通過する特別声明の簡易版
コレクショントラバーサルの三種類:
//ため循环 ため(INT I = 0、I <1000000; I ++){ TEMP = list.get(I)。 syso(TEMP)。 } //迭代器 ながら(it.hasNext()){ TEMP = it.next()。 syso(TEMP)。 } // foreachの (対象物T:リスト)のための TEMP = T。 syso(TEMP)。 }
効率: >イテレータイテレータ>のforeachループのために