Javaのコレクションフレームワーク記事のインタビューで勝利(3)

21、ArrayListのとベクトルとの差分

        両方のクラスは、Listインタフェースを(Listインタフェースは、Collectionインタフェースを拡張)、それらは、すなわち、コレクションに格納されているこれら二つの要素の位置が順序付けられ、ダイナミックアレイの等価のセットを注文している実装します我々は、後で要素インデックスの位置によって取り出すことができ、データは繰り返しに許容される、最大セットHashSetのなどとは異なるされており、缶などの要素を取得するためにHashSetのインデックス番号を設定しません、また、重複した要素を許可していません。

         :ベクターおよびArrayListの違いは、主に二つの側面含む
(1)同期:

       ベクターは、スレッドの同期の間にある方法であり、ArrayListのラインがそのうちの方法は、スレッド同期ある危険な手順、すなわち、スレッドセーフです。1つのスレッドだけのコレクションにアクセスできる場合は、それはそれは、スレッドの安全性を考慮していないので、ArrayListのを使用するのが最善である、効率が高くなります。複数のスレッドがコレクションへのアクセスがある場合は、私たちが所有する必要がないので、それは、ベクターを使用するのが最適ですそして再び、スレッドセーフなコードを書くことを検討してください。

(2)データの成長:

       内部に記憶その要素の数が容量を超えたときにベクトルのArrayList初期容量の大きさを有するが、それは記憶空間のArrayListとベクトルを大きくする必要があり、ストレージ・スペースを増加させるたびに、1つのメモリセルのみの増加がありませんしかし、メモリセルの増加複数、ある種のバランスを達成するためのメモリ空間と手順の利用効率との間のメモリセルの数がそれぞれ増加しました。ArrayListの成長戦略が明確に定義されていない間のベクトル二回、元のデフォルトの成長は、文書中の(オリジナルの1.5倍の増加からソースコードを参照してください)。ArrayListのとベクトルは、スペースの初期サイズを設定することができます設定は、成長のArrayListのメソッドのための部屋を提供していませんが、あなたはまた、ベクトル空間の成長を設定することができます。

    概要:成長0.5倍の倍のオリジナルのベクター、ArrayListの上昇があります。

 

22、ハッシュマップとのハッシュテーブルとの間の差

        HashtableのHashMapのは、軽量な実装(非スレッドセーフな実装)である、彼らはMapインタフェースを完了している、主な違いは、HashMapのはアクセスだけ一つのスレッドで、非スレッドセーフのためにヌル(null)のキー(鍵)を、できることです、効率はハッシュテーブルよりも高くなります。

        HashMapのは、キー入力または値としてnullを可能にし、Hashtableの許可されていません。

HashMapのハッシュテーブルは、削除メソッドが含まれているのcontainsValueのcontainsKeyを置き換えます。それは簡単に誤解につながる可能性が含まれているため。

        辞書Hashtableクラスから継承した、とHashMapのは、MapインタフェースのJava1.2の導入の実現です。

        最大の違いは、HashMapのではないながら、複数のスレッドがハッシュテーブルにアクセスするときにHashtableの方法は、同期され、その実施のための同期方法には必要ありませんされ、HashMapのは、それらを提供するために同期させる必要があります。

     それまでのHashMapとハッシュテーブル三つの側面。
        歴史的理由:.ハッシュテーブルを廃止辞書クラスに基づいて、ハッシュマップは、マップインタフェース導入のJava 1.2の実装である
        2つの同期を:.ハッシュテーブルが同期され、スレッドセーフであり、HashMapのラインは安全でない手順であります、同期していない
        。唯一のHashMapのエントリとしてnullを許可しますが、キーまたは値のテーブルになります。三元を

 

23、リストと地図の違いは?

        データ・セット・ストレージ・キーの別個のセットに格納され、他方が複列値そのようなデータは、リストに格納されたデータが配列され、そして繰り返し可能であり、地図データが順に格納されていない、キーがされていません繰り返し、その値が重複することができます。

 

24、リスト、Collectionインタフェースから継承されたかどうかを設定し、地図?

   リストには、Set市、地図ではありません

 

25、リスト、地図、設定して3つのインターフェース、要素にアクセス、違いは何ですか?

(テストレベル、レベル2の面の比較この質問:1が実際に内容を理解することであるが、第二は強い概要およびプレゼンテーションスキルを持っていることです。)

        まず、リストと設定の類似点は、彼らはコレクションと呼ばれる共通の親インターフェイスを、持っているので、こと、別の要素のコレクションです。セット内の重複する要素を許可しない、すなわち、2つの等しい(音符だけでなく、同じ)目標と集合Aのセットを想定し、そして今はオブジェクト集合Bのセットに再度したいオブジェクトを、持つことができません、オブジェクトAとオブジェクトBの等号、次にBがオブジェクトに格納されていないに等しい場合しかし、したがって、セット追加方法は、ブールのセットの値を返し、要素が設定されていない場合、この方法を追加に成功し、この要素に加えることができますtrueを返し、要素対等を含む要素に等しく設定した場合、この方法は、この時点で添加することができない要素を追加し、偽の値を返します。時間要素を取るために設定し、我々は唯一のIteratorインターフェイスのすべての要素を取得するには、いくつかの最初を取るために詳しく説明し、各要素をステップ実行することはできません。

       一覧はサイズによって、のような価格と並べ替え、ノート、年齢のない種類のシーケンシャルなセットを表します。我々は(OBJE)を追加する方法を複数回呼び出すと、鉄道駅の切符のようにオブジェクトを追加するたびに同じ順序を持っているキュー、最初の務め最初に来るによって並べ替え。時には、キュー、すなわち、呼び出し元の追加(intindex、OBJのe)の方法をジャンプすることができ、あなたがコレクションに格納されたオブジェクトの現在の位置を指定することができます。オブジェクトを繰り返し、Addメソッドを呼び出すたびに、オブジェクトは最初のコレクションの中に挿入されたリストに格納することができ、実際には、これはオブジェクト自体ではなく、セット内のインデックス変数ポイントで、集合に格納されますオブジェクトが繰り返し追加されたときxは、図に示すように、この目的は、、すなわち、オブジェクトのインデックスポイントの複数の組に対応します。リストには、Iteratorインターフェイスを持つすべての要素に加えて行うことができ、その後、各要素をステップ実行する、あなたはまた、明示的に最初の数を取るために(インデックスi)を取得するために呼び出すことができます。

       地図と以下のように定義される方法を入れ複列の集合、あるセットリストで:重複キーを格納しない、キー/値のペアを格納すること(OBJキー、OBJ値)、たびに格納されています等号が等しい比較することで、このルールが繰り返されます。、キーに従って得られる、すなわち、取得し(オブジェクトキー)のキー値に対応する値を返すことができる適切な値を取ります。さらに、すべてのキーと一緒に得ることができ、またのMap.Entryオブジェクトにキーと値のペアのセットを得ることができる全ての値を得るために組み合わされてもよいです。

 リストの特定の重複要素を有することができる要素を保持するため。セットには、重複する要素、内部順序を持つことはできません。値が複数の値を持つことができ、キーと値の値が保存地図。

 

26、ストレージのパフォーマンスとのArrayListに、ベクトル、LinkedListの特性を言います

        ArrayListのとベクトルデータは、アレイ、アレイ素子の数が増加すると、直接シリアル番号によって索引付け要素を許可要素、インサートが、移動等のメモリ動作に関わる要素配列要素を挿入するように格納されている実際のデータよりも大きい場合を使用して格納されたインデックスデータそう高速及び低速データ挿入、同期(スレッドセーフな)ので、ベクター法、より典型的には、ArrayListの性能差。そして、LinkedListのは遅くなるが、唯一の前に、これを記録した後、データ項目、挿入速度を挿入することができます。前方またはインデックスをトラバースするために必要なシリアル番号データによってインデックス付け、保存された二重にリンクされたリストを使用して実装しました

        LinkedListのは、スレッドセーフである、LinkedListのは、使用するLinkedListのスタックとキューとして使用することができる多数の方法を提供します。

 

27、繰り返し要素の1セットのベクトルの除去

ベクトルnewVector =新しいベクトル();

以下のために(; I <vector.size(); int型iが0を= I ++)

{

オブジェクトOBJ = vector.get(I)。

       もし(newVector.contains(OBJ)!;

             newVector.add(OBJ)。

}

セットの要素が重複することはできません使用する簡単な方法があります:

HashSetset =新しいHashSetの(ベクトル)。

 

28、収集と差のコレクション。

        コレクションは、インターフェースが彼の主な設定とリストを継承し、優れたクラスのインタフェースのコレクションです。

        クラスのクラス集合に対して、彼はソート、検索コレクションの多様性を達成するための静的メソッドのシリーズを提供していますし、スレッドセーフな操作ので、コレクションのヘルプ。

 

29は、要素に設定しますか?==または等号(とそれらの間の違いは何ですか)?この方法はそれを繰り返すかどうかを区別するために使用され、繰り返されていませんか?

        要素の設定は、使用される要素を繰り返さないか()決意の方法に等しく繰り返されます。

        その差が等しい==テスト腐ったタイトルで、ここについて言いました:

        ==即ち、メモリに記憶された値に対応する変数を比較するための2つの値が等しい比較するように設計されたオペレータが、同じであり、データの2つの基本的なタイプまたは二つの基準変数を比較するに等しく、 ==演算子にのみ使用することができます。

        二人の外観を比較するために同じ比率であるように等しく方法は、同じである二つの別々のオブジェクトの内容を比較するために使用され、それは2つのオブジェクトが独立している比較します。 

        たとえば、次の二つの文は、2つの新しいオブジェクトを作成し、これら2つの変数の/ Bが2つの異なるオブジェクトである1つのオブジェクトを指し、それらは第一アドレスと異なっている、すなわち、aとb格納されています値が同じではない、したがって、式は== Bは偽を返し、これら二つのオブジェクトの内容は同じであり、従って、式a.equals(b)がtrueを返します。


30、あなたは、コレクションの種類を知っていますか?mainメソッド?

        最も一般的なタイプはリストと地図のセットです。リストの特定の実装は、ビルドに、より適した可変サイズのリストであり、ArrayListの及びベクターを含む、動作とオブジェクトリストの要素の任意のタイプを格納します。リストには、数値インデックスによるアクセス要素の場合に適用されます。

        地図は、記憶素子のより一般的な方法を提供します。各キー値にマッピングされる、(「キー」と「値」と呼ぶ)の要素のコレクションを格納するためのマップ。

        彼らは、検索方法を変更するには、追加および削除されています。

        セットの場合は、おそらく、削除を追加する方法である、などが含まれています

        マップについては、おそらく方法は、削除を置くために、などが含まれています

        Listクラスは、要素の順序に取ることができるので、(int型のインデックス)、このような方法を取得し、このような方法が取得(int型のインデックス)セットしますクラスではありません。リストとすべての要素がイテレータオブジェクトの反復を取得する最初の、反復することができて設定は、そう、セット、リストイテレータクラスは、イテレータオブジェクトを返すメソッドを持っています。マップは、また、方法、パラメータが鍵となる取得3セット、キーのすべてのリターンコレクション、他のリターンすべての値のコレクションに戻り、その後、オブジェクトののentrySetコレクションにキーと値の組み合わせの復帰、マッピングすることができます戻り値が値に対応するキー、この遊びで、また心の中でメソッドをテストする機能があり、これらのプログラミングプロセスは、ライン上でのさまざまな使用に関するすべての3人の話を組み合わせプロンプトが表示されます。

おすすめ

転載: www.cnblogs.com/mxb0611/p/11904141.html