配列のセット?
:(配列は、基本的なデータタイプを格納することができる)オブジェクトを格納するための容器であるが、配列の長さが固定され、オブジェクトの数が不明の場合に使用するのに適していません
:(オブジェクトを格納することができる設定し、オブジェクトの種類が同じではない)可変長のセットは、ほとんどの場合に使用することができます
Collectionインタフェースはクラスのルートインタフェースのコレクションである、Javaはこのダイレクトインタフェースの実装クラスを提供していませんが、それは、それは二つのインタフェースを持っていた継承されます
設定する:重複した要素が含まれていません
リスト:順序集合は、それがインデックスでアクセスする方法を提供し、重複した要素を含めることができます
地図は別のインターフェースjava.utilパッケージであり、それは互いに独立Collectionインタフェースを、重要ではなく、地図のキーを備え、セットの一部ではありません - の値のペア、重複地図キーを含めることはできませんが、同じことを含んでもよいです値。
イテレータ、すべてのコレクションクラスは、以下の3つの主な方法を含む、要素のセットを横断するためのインタフェースであるイテレータインターフェースを実装します。
- hasNext():次の要素があります
- 次の():次の要素を返します
- 削除():現在の要素を削除します。
いくつかの重要なインタフェースとクラス紹介
- リスト(注文し、繰り返し可能)
リストINSERT INTOコレクションは、データを削除するための秩序が、また、再現性、リストインデックスに保存されているオブジェクトのリストが背後を伴って、インデックスおよび関連する方法、クエリの速度のシリーズで、懸念していますデータを移動、挿入データは非常に遅いです
- セット(順不同、繰り返すことはできません)
オブジェクトストレージに設定しますが、順序付けられてい繰り返すことはできません、コレクション内のオブジェクトが特定の方法でソートされていない、単にコレクション内のオブジェクトを置きます。
- 地図(キーと値のペア、ユニーク、ユニークではありません)
マップに格納されたキーセットは、キーを繰り返すことができない場合、値は対応する値を得るために、トラバーサルを設定コレクションの設定マップコレクションを横断するときに鍵のセットを得るために、キー値が得られるによれば、繰り返してもよいです。
トラバーサル
これは、コレクション内の次の4つの一般的な出力を提供します
- イテレータ:反復の出力は、それが最も使用される出力であります
- 反復子:イテレータは、専門のリスト "の内容を出力するためのサブインタフェースであり、
- foreachの出力:JDK1.5以降に発表の新機能。または出力配列を設定することができ
- forループ
ArrayListの和LinkedListの
ArrayListにしないとLinkedListの使用量の差が、しかし、機能に違いがあります
LinkedListのは、多くの場合、非常に少ない多くの追加および削除の操作とクエリの場合に使用されています
ArrayListをより頻繁に、クエリ、以下の動作条件の下での追加に使用。
地図コレクション
実装クラス:HashMapの、ハッシュテーブル、のLinkedHashMapとのTreeMap
HashMapの
それはハッシュコードの結合に応じて、最も一般的な記憶素子であるHashMapの地図は、それが速いアクセス速度で、キーの値から直接入手することができます。
HashMapのは、複数のレコードがNullで許可するように、一つのキーレコードの最大がNullであることができるようにデータを取得するために、行き来することは、同期されていないキーが繰り返してはならないので、完全にランダムであります
ハッシュ表
ハッシュテーブルとHashMapのは、HashMapのに似ていますスレッドセーフバージョンである、それは一つのスレッドだけがハッシュテーブルを書くことができ、任意の時点で、同時スレッドをサポートしています
ハッシュテーブルは、従って、比較的遅くなり、それはサブ辞書クラスを統合書き込みをもたらし、それは別のキーまたは値の記録が低効率ながら、ヌルであることはできません
LinkedHashMap
HashMapのより遅いトラバースするときのLinkedHashMap保存が最初に挿入されなければならないレコードを取得するために、IteraorのLinkedHashMapが通過する挿入順序を、記録するために、HashMapのは、すべての特性を持っています
TreeMapの
TreeMapのは、あなたがイテレータでThreeMap横断ソートコンパレータを指定することができ、キーシーケンスに基づいてレコードを保存することができSortMapインターフェイス、デフォルトソートキー値(天然の配列)を昇順さを実装し、取得したレコードは、行が列の上にあります、キーは、空、非同期に許可されていません
地図トラバーサル
- キーセット();
すべてのキーがイテレータ設定時間として設定コレクションに堆積され、地図、次に、GETメソッドに応じて、各キーに対応する値を得る、すべてのキーの反復を除去することが可能であり、キーセット()だけ反復GETを介して()の後キーを取ります。
- ebtrySet()
セット<のMap.Entry <K、V >>のentrySet()全体が一つに格納されているように(つまり、一部の関係である)このマップ値に含まれているマッピングのセットビューを返し(キー値)でありますコレクションに設定された、との関係を示すマップのMap.Entry
entrySet()反復の後e.getKey()、e.getValue()及び2つの方法がキー値、戻り値はインタフェースのエントリである来るかもしれません
推奨のentrySet()メソッドは、高効率
キーセットの場合は、実際に、一度イテレータに、二回のHashMapに対応するキー値から取り出されたものを横断
entrySet()だけで、初めてを横断する、キーと値は、それが非常に速く、エントリーに入れています。トラバーサル時間差のトラバーサルの二種類が明らかです。
ArrayListの違いとLinkedListの
- ArrayListのデータ構造は動的配列、LinkedListのベースリンクリストデータ構造に基づいて実装されています
- ポインタのLinkedListを移動するようなランダムアクセスのために、取得と設定、ArrayListをLinkedListの優れた性能
- 新しいおよび削除、追加および削除、LinkedListの比較優位、ArrayListには、データを移動するので、データの単一の挿入や削除の値ならば、それは、実際の状況に依存しますが、速度はArrayListをLinkedListのよりも良いですが、もし用各データを挿入するためのバッチランダム挿入し、データの削除は、LinkedListのチャンスは、あなたが後に挿入ポイントを移動すると、すべてのデータをArrayListに、ArrayListのよりもはるかに優れ読むには
HashMapの与ツリーマップ
- そのハッシュコードによるHashMapのは、コンテンツをすばやく見つけ、TreeMapのすべての要素は、あなたが結果を得るために必要がある場合には、TreeMapのを(順番にHashMapの要素が固定されていません)を使用するためにたくさん持っている必要があり、ある一定の秩序を維持しています
- 地図に挿入、削除、および要素を見つけ、HashMapのが最良の選択ですが、自然の秩序やカスタムオーダートラバーサルキーをフォローしたい場合は、TreeMapのは、キークラスHashMapを使う方が良いでしょうのhashCode(の明確な定義を追加する必要が)と()の実装に等しいです。
要素のマップが、順序はハッシュコード(その結果、同じではない)が同じでなくてもよう
同じテストを実行します。
HashMapのでは、同じ値をマッピングします。偽、等しい異なるため、
TreeMapのでは、配列の同一のマップ値、のTreeMapに記載の真等しいが、(時間)に等しい異なる順序が、分析されます。
ハッシュテーブルのHashMapの違い
- 同期:ハッシュテーブルは、それが同期され、スレッドセーフであり、HashMapのは、スレッドセーフで、同期していません
- ハッシュマップは、複数の要素がヌルである、一つのキーをnullにでき
- キーと値のハッシュテーブルをnullにすることはできません
Javaのどのコレクション・フレームワークは、コレクションフレームワークの利点のいくつかを言うことです
各プログラミング言語は、元のJavaバージョンのセットがヒットコレクションが含まれています:ベクタ、スタック、ハッシュテーブルと配列は、コレクションの普及で、Java1.2は、すべてのコレクションインタフェースを含めることを提案し、アルゴリズムは、設定されたフレームワークを実現するために保証スレッドセーフ、およびジェネリックコレクションクラスの同時使用の場合には、Javaは長い間経験している、それはまた、Javaと契約、ブロッキングインタフェースだけでなく、その実装が含まれています。フレームの次のセットの利点のいくつか
- 開発コストを削減するのではなく、私たち自身のコレクションクラスを実装するためのコアコレクションの使用
- 厳格なテストを介してフレームワークの組み合わせを使用することによって、コードの品質が向上します
- 供給コレクションJDKを使用することにより、コードのメンテナンスコストを低減することができます
- 操作性と再利用性
コレクション・フレームワークジェネリックの利点は何ですか
Java1.5は、すべてのコレクションインタフェースと実装は、私たちが対応できる汎用オブジェクト型を提供することができ、それの多くを使用し、ジェネリック医薬品を導入し、要素の他のタイプを追加したい場合は、それがになりますので、コレクションは、あります実行時にエラーを回避するために、エラーコンパイル時、あなたはコンパイル時にエラーメッセージが表示されます、汎用コードがきれいで、私たちは、明示的な変換演算子とのinstanceofを使用する必要はありません。
Javaのインタフェースで設定したものの基本的な枠組み
コレクションインタフェースのルートレベルのセットで、あるオブジェクトのグループを代表して、コレクション、その要素は、Javaは、このインタフェースのいずれかの直接的な実装を提供していません。
セットには、抽象デジタルインタフェースモデリングのこのコレクションは、ちょうどカードのデッキのような、コレクションを表すために使用される重複要素のないコレクションです。
リストは順序付きコレクションで、繰り返し要素を含むことができ、あなたは、動的配列の長さのようなリストを変換し、そのインデックスによって任意の要素にアクセスすることができます
地図は、オブジェクトのキー値にマップは、地図が重複キーを含めることはできませんで、各キーは値までマッピングすることができます
なぜ継承されていない地図インタフェースCollectionインターフェイス
Mapインタフェースとその実装にもかかわらず、フレームのコレクションの一部ですが、コレクションの地図コレクション地図ではありませんではないので地図コレクション無意味を継承、およびその逆
イテレータは何ですか?
イテレータインターフェースは、任意のコレクションを横断するインターフェースを提供し、我々はイテレータインスタンスを取得するためにコレクション・イテレータからの方法を使用することができ、反復子は、反復プロセス要素の除去に発信者を可能にします
HashMapのどのように動作します
HashMapのは、HashMapのキーのhashCode()およびハッシュアルゴリズムを使用して、putメソッドを呼び出して、我々はキーと値のペアを通過したとき、彼は、hashCode()およびequals()メソッドを使用している、ハッシュアルゴリズム、PUTを使用してメソッドを取得しますエントリが存在した場合のLinkedList内のインデックスエントリ記憶ストレージキーと値のペアを見つけるために、かどうか、それが送達キーをチェックするために等号()メソッドを使用して既に存在する場合、それは値をカバーする、そうでない場合、それが作成されます存在新しいエントリしてから保存し、私たちは(取得キーの呼び出しを通過させるには)メソッドは、配列のインデックスを見つけ、その後、右の項目を見つけるために、等号()メソッドを使用するには、再度のhashCode()を使用していることですし、その値を返します。
hashCode()メソッドとequals()メソッドとの重要性
HashMapのは、これらのメソッドが正しく実装されていない場合、我々はHashMapのから値を取得しようとすると、これらの方法は、使用されるインデックスキーと値のペアを決定するためにKeyオブジェクトのhashCode()およびequals()メソッドを使用しますこの場合、2つの異なるキーが同じハッシュコード()とequals()出力を生成します
HashMapのは、彼らが、その後、同じですが、別の場所に保存されているすべての重複データが使用hashCode()およびequals()の重複を見つけることができませんクラスの同じセットをそれらを格納するのではなく、それらをカバーだと思いますので、彼らは非常にあります重要
equals()とhashCode()は、次の規則に従うべきで実装します。
- o1.equals(O2)場合は、O1、のhashCode()== o2.hashCode()は常に真のです
- o1.hashCode()== 02.hashCode()場合は、o1.equals(O2)が真であるという意味ではありません。
簡単に言えば:
同じハッシュコードは、同じことは必ずしも物体ではありません
同じオブジェクトの中で、必ずしも同じハッシュコード。
あなたは、キー・マップとして任意の種類を使用することができます。
次のことができます!
考慮すべきポイントを使用する前に
- クラスはイコール()メソッドをオーバーライドする場合は、ハッシュコード()メソッドを書き換えるべき
- クラスのすべてのインスタンスが続くとequals()とhashCode()関連ルールします
- クラスは、等号()を使用していない場合は、ハッシュコードでそれを使用するべきではありません()で
HashMapのとハッシュテーブルの違いは何ですか
- HashMapのキーと値が空であることができますが、ハッシュテーブルを許可していません。
- ハッシュテーブルは、むしろHashMapのよりも、安全のために同期され、シングルスレッド環境のHashMap、マルチスレッド環境用ハッシュテーブルのためにそう
どのようにHashMapのかThreeMapを使用することにしました
地図は、そのような要素と位置付けを削除する操作で挿入、HashMapのは、穴を選択されている、しかし、あなたがキートラバースの順序集合が必要な場合は、あなたのコレクションのサイズに基づいてThreeMap高い選択性、 HashMapのは、転置TheeMap整然としたキー・マップ・トラバーサル、より高速な要素を追加することもできます
ArrayListの類似点と相違点とVertor
ArrayListのとベクトルは、多くの場合、非常によく似ています
- 両方のインデックス、および内部支持体のアレイに基づいています
- どちらの挿入の順序を維持、我々は、挿入順序に従って要素を取得することができます
- 両方のArrayListとベクトルがヌル値を許可する、インデックス値は、要素へのランダムアクセスのために使用することができます
異なる点
- ベクターは、安全ではなく、ArrayListのように同期されています
- ArrayListには、Vectorよりも高速です
- ArrayListのより一般的な
配列の違いとArrayListのは何ですか?より適切な配列?
- 配列の基本型とオブジェクトを収容することができ、およびオブジェクトのArrayListを収容することができます
- アレイは、指定されたサイズ、サイズがArrayListに固定されています
- などのaddAll、rumoveAllとイテレータとして配列ではないので、多くのArrayListの機能、
- リストのサイズが指定されている場合は、愛ああの最も怒ったり保管し、それらを横断
- あなたは多次元配列を使用している場合は、[] []一覧より<リスト<>>もっと簡単にアレイを使用
ArrayListの違いとLinkedListのは何?
どちらも、ArrayListを達成し、Listインタフェースをリンクされたが、それらの間にいくつかの違いがありますしています
- ArrrayList時間ベースのデータ構造は動的配列である、ListedListリストをリンクされたデータ構造が基づいています
- ポインタのLinkedListを移動するようなランダムアクセスでは、スピードよりもArrayListをLinkedListのget()は()と設定
- ArrayListのデータを移動するための操作は、追加して、LinkedListの比較優位を削除し、新規および削除については、
- どちらも、安全ではないが、重複することができ、容易に入手可能です。
どのコレクションは、要素へのランダムアクセスを提供しますか?
ArrayListに、HashMapの、TreeMapのハッシュテーブルは、要素へのランダムアクセスを提供します。