コレクション インターフェイス: コレクションは最も基本的なコレクション インターフェイスであり、JAVA コレクション (Set と List のみを含む) に適用できる共通メソッドを宣言します。 Set と List はどちらも Collection と Map
Collection インターフェースのメソッドを継承します: boolean add(Object o): オブジェクトへの参照をコレクションに追加しますvoid clear(): コレクション内のすべてのオブジェクトを削除します。維持されなくなりました これらのオブジェクトへの参照があります
boolean isEmpty(): コレクションが空かどうかを判断します
boolean contains(Object o): コレクションが特定のオブジェクトへの参照を保持しているかどうかを判断します
Iterartor iterator(): Iterator オブジェクトを返しますコレクションを走査するために使用できます
boolean Remove(Object o) の要素: コレクションからオブジェクトへの参照を削除します
next(): 次の要素を返します
remove(): 前の要素を削除します。コレクション next() メソッドによって返される要素。
Set set=new HashSet(); String s1=new String("hello"); String s2=s1; String s3=new String("world"); set.add(s1); set.add(s2); set.add(s3);
Set の add() メソッドは、オブジェクトがコレクションに格納されているかどうかをどのように判断しますか?
boolean isExists=false; Iterator iterator=set.iterator(); while(it.hasNext()) { String oldStr=it.next(); if(newStr.equals(oldStr)){ isExists=true; } }
ArrayList(): 長さを変更できる配列を表します。要素にはランダムにアクセスでき、ArrayList() への要素の挿入と削除は時間がかかります。
LinkedList(): 実装ではリンクされたリストのデータ構造を使用します。挿入と削除は高速ですが、アクセスは低速です。
for(int i=0; i<list.size();i++){ System.out.println(list.get(i)); }
Iterator it=list.iterator(); while(it.hashNext){ System.out.println(it.next); }
Map は Collection インターフェイスから継承しません。Map コレクションから要素を取得する場合、キー オブジェクトが指定されている限り、対応する値オブジェクトが返されます。
Object Remove(Object key): KEY に関連する要素を削除
void putAll( Map t): 特定の画像のすべての要素を画像に追加します
void clear(): 画像からすべてのマッピングを削除します
boolean containsValue(Object value): value 値が画像に存在するかどうかを判断します
int size(): 現在の画像内のマッピングの数を返します
boolean isEmpty() : 画像内にマッピングがあるかどうかを判断します。
Map は各要素のコピーも保存しますが、これは「キー」に基づいているため、要素が追加される順序は関係ありません。要素が追加される順序が重要な場合は、LinkedHashSet または LinkedHashMap を使用する必要があります。
実際には 2 つのタイプがあります。1 つは基本的な ArrayList で、要素にランダムにアクセスするという利点があります。もう 1 つは、より強力な LinkedList です。これは、高速ランダム アクセス用に設計されていませんが、より一般的なメソッドのセットを備えています。
リスト: 順序はリストの最も重要な機能です。これにより、要素の特定の順序が確実に維持されます。 List は Collection に多くのメソッドを追加し、List の途中で要素を挿入および削除できるようにします (これは LinkedList に対してのみ推奨されます)。List は ListIterator を生成でき、これを使用して List を 2 方向に走査できます。リストの削除要素の途中から挿入および移動することもできます。
ArrayList: 配列によって実装されたリスト。要素への高速なランダム アクセスが可能ですが、リストの途中で要素を挿入したり削除したりするのは非常に遅くなります。 ListIterator は、要素の挿入や削除ではなく、ArrayList を後ろから前に走査するためにのみ使用する必要があります。それはLinkedListよりもはるかに高価だからです。
LinkedList: 順次アクセスが最適化されており、リストの途中での挿入と削除のオーバーヘッドは大きくありません。ランダムアクセスは比較的遅いです。 (代わりに ArrayList を使用してください。) 次のメソッドもあります: addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()。これらのメソッドは (どのインターフェイスまたは基本クラスにも定義されていません) LinkedList を作成します。スタック、キュー、両端キューとして使用できます。
Set の関数メソッド:
Set は Collection とまったく同じインターフェイスを持っているため、前の 2 つの異なる List とは異なり、追加の関数はありません。実際、Set は Collection ですが、その動作は異なります。 (これは、継承とポリモーフィックなアイデアの典型的な応用です。異なる動作を示します。) Set は重複した要素を保存しません (要素が同じであると判断する方法については、より責任があります)
Set: Set に格納される各要素Set は重複した要素を保存しないため、一意である必要があります。 Set に追加される要素は、オブジェクトの一意性を保証するために、equals() メソッドを定義する必要があります。 Set と Collection はまったく同じインターフェイスを持っています。 Set インターフェイスは、要素の順序が維持されることを保証しません。
HashSet: 素早い検索のために設計されたセット。 HashSet に格納されるオブジェクトは hashCode() を定義する必要があります。
TreeSet: 順序を保存するセット。最下層はツリー構造です。これを使用して、セットから順序付けされたシーケンスを抽出します。
LinkedHashSet: HashSet のクエリ速度を持ち、内部的にリンク リストを使用して要素の順序 (挿入順序) を維持します。したがって、反復子を使用して Set を走査すると、結果は要素が挿入された順序で表示されます。
Map の Function メソッド:
メソッド put(Object key, Object value) は、「値」(取得したいもの) と、「値」に関連付けられた「キー」(キー) (検索に使用します) を追加します。 )。 get(Object key) メソッドは、指定された「キー」に関連付けられた「値」を返します。 containsKey() と containsValue() を使用して、マップに特定の「キー」または「値」が含まれているかどうかをテストできます。
標準 Java クラス ライブラリには、いくつかの異なるマップが含まれています: HashMap、TreeMap、LinkedHashMap、WeakHashMap、IdentityHashMap。これらはすべて同じ基本インターフェイス Map を持っていますが、その動作、効率、並べ替え戦略、保存されたオブジェクトのライフ サイクル、および「キー」の同等性を決定する戦略が異なります。
実行効率は Map にとって大きな問題です。 get() の動作を見てみると、ArrayList 内の「キー」の検索が非常に遅い理由がわかります。ここで HashMap の速度が向上します。 HashMap は、ハッシュ コードと呼ばれる特別な値を使用して、キーの遅い検索を置き換えます。
「ハッシュ コード」は、オブジェクトを表すために使用される「比較的一意な」int 値であり、オブジェクトに関する特定の情報を変換することによって生成されます。 hashCode() は基本クラス Object で定義されたメソッドであるため、すべての Java オブジェクトはハッシュ コードを生成できます。
HashMap は、オブジェクトの hashCode() を使用して迅速なクエリを実行します。このアプローチにより、パフォーマンスが大幅に向上します。
Map: 「キーと値のペア」の相関関係を維持し、「キー」を通じて「値」を検索できるようにします。
HashMap: ハッシュ テーブルのマップ ベースの実装。キーと値のペアの挿入とクエリのコストは固定です。容量と負荷率はコンストラクターを通じて設定して、コンテナーのパフォーマンスを調整できます。
LinkedHashMap: HashMap に似ていますが、HashMap を反復処理する場合、「キーと値のペア」が取得される順序は、挿入順序、または最も最近使用されていない (LRU) 順序になります。 HashMap よりもわずかに遅いだけです。内部順序を維持するためにリンク リストを使用するため、反復アクセスが高速になります。
TreeMap: 赤黒ツリー データ構造に基づいた実装。 「キー」または「キーと値のペア」を表示すると、それらは並べ替えられます (順序は Comparabel または Comparator によって決まります)。 TreeMap の特徴は、得られる結果がソートされていることです。 TreeMap は、サブツリーを返すことができる subMap() メソッドを持つ唯一の Map です。
WeakHashMap: 弱いキー マップ。マップで使用されるオブジェクトも解放できます。これは、特別な問題を解決するために設計されています。マップの外に「キー」を指す参照がない場合、この「キー」はガベージ コレクターによってリサイクルできます。
IdentifyHashMap: 「キー」を比較するために、equals() の代わりに == を使用するハッシュ マップ。特殊な問題を解決するように設計されています。
Java での Set、List、Map の使用法と違いに関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。