の形式foreach: for (int i : arr) {...}
イテレータの形式:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}
5. ArrayList と LinkedList
ArrayList と LinkedList の間に使用方法の違いはありませんが、機能には依然として違いがあります。 LinkedList は、追加と削除が多くクエリ操作が少ない状況でよく使用されますが、ArrayList はその逆です。
6. マップコレクション
実装クラス: HashMap、Hashtable、LinkedHashMap、TreeMap
HashMap
HashMap は、キーの HashCode 値に従ってデータを格納します。アクセス速度が速く、トラバース時にデータを取得する順序は完全にランダムです。 HashMap はキーオブジェクトを繰り返すことができないため、最大でも 1 つのレコードのキーを Null にすることができ、複数のレコードの値を Null にすることができます。
Hashtable
Hashtable は HashMap に似ています。 HashMap のスレッドセーフ バージョンです。スレッド同期をサポートしています。つまり、Hashtable に書き込むことができるのは常に 1 つのスレッドだけです。これにより、Hashtale は書き込み時に遅くなります。違いは、Dictionary クラスから継承することです。同時に、記録されたキーまたは値を null にすることはできません。
ConcurrentHashMap
スレッドセーフでロック分離。 ConcurrentHashMap は、内部でセグメントを使用してこれらのさまざまな部分を表します。各セグメントは実際には小さなハッシュ テーブルであり、独自のロックを持っています。複数の変更操作は、異なるセグメントで実行される限り、同時に実行できます。
LinkedHashMap
LinkedHashMap は、Iteraor で LinkedHashMap を走査する際に、必ず最初に取得されたレコードが最初に挿入されます。走査中は HashMap よりも遅くなりますが、HashMap の特性をすべて備えています。
TreeMap
TreeMap は、保存するレコードをキーに従って並べ替えることができる SortMap インターフェイスを実装しています。イテレーターを使用する場合は、並べ替えコンパレーターを指定することもできます。 TreeMap を走査し、取得したレコードをソートします。キー値を空にしたり、非同期にすることはできません。
マップ トラバーサル
最初のタイプ: KeySet()
マップ内のすべてのキーをセット コレクションに保存します。 set にはイテレータがあるためです。すべてのキーは、get メソッドに基づいて反復的に取得できます。各キーに対応する値を取得します。 keySet(): 反復後、キーは get() を通じてのみ取得できます。
データ行の主キーを取得する際に HashMap.keySet() メソッドが使用され、このメソッドによって返される Set 結果のデータが順序どおりに配置されないため、取得される結果は順序が狂います。
一般的な使用法は次のとおりです:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put(" key3" ,"lisi3");
map.put("key4","lisi4");
//まず、マップ コレクション内のすべてのキーのセット コレクションを取得します keyset()
イテレーター it = map.keySet() .iterator() ;
//イテレータを取得します
while(it.hasNext()){
Object key = it.next();
System.out.println(map.get(key));
}
2 番目:entrySet()
Set>entrySet() //このマップに含まれるマッピング関係の Set ビューを返します。 (リレーションシップはキーと値のペアです)、つまり、(キーと値) 全体が 1 対 1 で Set コレクションに格納されます。 Map.Entry はマッピング関係を表します。 entrySet(): 繰り返しの後、キーと値は e.getKey() と e.getValue() によって取得できます。返されるのは Entry インターフェイスです。
一般的な使用法は次のとおりです:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put(" key3" ,"lisi3");
map.put("key4","lisi4");
//マップコレクション内のマッピング関係を取り出し、セットコレクションに格納します
イテレーター it = map.entrySet() .iterator() ;
while(it.hasNext()){
Entry e =(Entry) it.next();
System.out.println("Key"+e.getKey () + "値は " + e.getValue ());
}
より効率的な 2 番目のメソッド、entrySet() メソッドを使用することをお勧めします。
keySet は実際には 2 回走査されます。1 回目はイテレータに変換するため、もう 1 回目は HashMap からキーの値を取得します。エントリセットは最初にのみ走査し、キーと値の両方をエントリに入れるため、処理が高速になります。 2 つのトラバース間のトラバース時間の違いは依然として明らかです。
7. 主な実装クラス
Vector と ArrayList の違いのまとめ 1. Vector はスレッド同期なのでスレッドセーフですが、arraylist はスレッド非同期なので安全ではありません。スレッドの安全性要素が考慮されていない場合は、通常、arraylist を使用する方が効率的です。
2. コレクション内の要素の数が現在のコレクション配列の長さより大きい場合、ベクトルの増加率は現在の配列の長さの 100%、配列リストの増加率は現在の配列の長さの 50% になります。コレクション内で比較的大量のデータを使用する場合、ベクトルを使用すると一定の利点があります。
3. 指定した場所のデータを検索する場合、vector と arraylist で使用される時間は同じです。データに頻繁にアクセスする場合は、この時点で Vector と arraylist の両方を使用できます。また、指定した位置を移動すると後続のすべての要素が移動する場合は、この時点で linklist の使用を検討する必要があります。これは、データを指定した位置に移動し、他の要素は移動しないためです。
ArrayList と Vector は配列を使用してデータを保存するため、実際に保存されるデータよりも多くの要素を追加および挿入できますが、データの挿入には配列の移動などのメモリ操作が必要になります。 Vector は同期メソッド (スレッド安全性) を使用するため、シリアル番号によるデータのインデックス付けを実装する ArrayList よりもパフォーマンスが悪くなります。ただし、データを挿入するときに必要なのは、この項目の前後の項目で十分であるため、複数回挿入する方が高速です。
arraylist と linkedlist1.ArrayList は動的配列に基づいたデータ構造を実装し、LinkedList はリンク リストに基づいたデータ構造を実装します。
2. LinkedList はポインタを移動する必要があるため、ランダム アクセスで取得および設定する場合は、LinkedList よりも ArrayList の方が優れています。
3. 新規および削除操作の追加および削除では、ArrayList はデータを移動する必要があるため、LinedList の方が有利です。これは実際の状況によって異なります。単一のデータのみを挿入または削除する場合は、ArrayList の方が LinkedList よりも高速です。ただし、データをバッチでランダムに挿入および削除する場合、データの一部が ArrayList に挿入されるたびに、挿入ポイントとその後のすべてのデータを移動する必要があるため、LinkedList の速度は ArrayList よりもはるかに優れています。
HashMap と TreeMap1. HashMap はハッシュコードを使用してコンテンツを迅速に検索しますが、TreeMap 内のすべての要素は特定の固定順序を維持する必要がある場合は、TreeMap を使用する必要があります (HashMap では要素の順序は変わりません)。修理済み)。
2. Map 内の要素を挿入、削除、検索するには、HashMap が最適です。ただし、自然な順序またはカスタム順序でキーを反復処理する場合は、TreeMap の方が適しています。 HashMap を使用するには、追加されたキー クラスが hashCode() およびquals() の実装を明確に定義する必要があります。
2 つのマップの要素は同じですが、順序が異なるため、異なる hashCode() になります。
同じテストを実行します。
HashMap では、同じ値のマップは異なる順序であり、equals は false です。
TreeMap では、同じ値のマップは異なる順序であり、equals は true であり、treeMap がでのequals()は整理されます。
HashTable と HashMap1. 同期性: Hashtable はスレッドセーフ、つまり同期的ですが、HashMap はスレッドセーフですが同期的ではありません。
2. HashMap では 1 つの null キーと複数の null 値が許可されます。
3. ハッシュテーブルのキーと値を null にすることはできません。