私は長い間 Java コレクションを使用してきましたが、Java コレクションの構造を体系的に勉強したことがありませんでした。今日、私は個人的に次のクラス図を描き、最終的に何かを得ることができました。
1. すべてのコレクションは Iterable インターフェイスを実装します。
Iterable インターフェースには抽象メソッドが含まれています: Iterator iterator(); このメソッドを実装する各コレクションは Iterator オブジェクトを返します。
イテレータ: hashNext()、next()、remove() の 3 つのメソッドが含まれており、これらを介してコレクションの走査と要素の削除を実行できます。たとえば、次のようになります。 list.add("a");
list.add("b"); list.add("c");
イテレーター = list.iterator();
while (イテレーター .hasNext ()) {
文字列要素 = iterator.next();
System.out.println(element);//a b c
}
System.out.println(list);//[a, b, c] iterator = list.iterator(); iterator.next();
iterator.remove();
System.out.println(list);//[b, c]
ps: なぜどうでしょうかIterator インターフェイスを直接実装しますか?理由: Iterator は現在のコレクションの位置情報を保持し、次回使用されるときは 0 から開始されず、Iterable インターフェイスは毎回 Iterator オブジェクトを返します (Iterator は内部クラスを通じて実装されます)。互いに独立した影響を及ぼします。
2. ListIterator
AbstractList から始まり、パブリック ListIterator
listIterator() メソッドがカプセル化され、add()、previous()、hasPrevious() および Iterator に基づくその他のメソッドを追加する ListIterator を返します。双方向のトラバースが可能です。
AbstractList
list = new ArrayList
();
list.add("a");
list.add("b");
list.add("c");
ListIterator
イテレータ= list.listIterator(3);
while (iterator.hasPrevious()) {
String要素 = iterator.previous();
System.out.println(element);//c,b,a
}
3. 比較
ArrayList: 重複した要素を保存できるようになり、要素が順序付けされるため、ランダム アクセスがより便利になります。
LinkedList: リンクされたリストの実装。挿入および削除の場合は ArrayList よりも優れています。
HashSet: 重複要素と順序付けされていない要素は許可されず (ハッシュ関数は要素を並べ替えるため、迅速にクエリできます)、null 値は許可されます。
TreeSet: 赤黒ツリーの並べ替え。並べ替え可能。含まれる要素は Comparable インターフェイスを実装し、compareTo メソッドを定義する必要があり、null 値は許可されません。
HashMap: スレッド安全ではありません。キーが含まれるかどうかを判断するには、containsKey() メソッドを使用します。ハッシュ配列のデフォルトのサイズは 16 です。 2 の指数である必要があります。ハッシュ値を再計算します。
ハッシュテーブル: スレッドセーフ、キーと値に null 値は許可されず、重複キーは許可されません。配列のデフォルトのサイズは 11 で、増加方法はハッシュを使用する old*2+1 です。含まれるオブジェクトの値。
4. コレクションと配列
コレクション: java.util の特別なクラス。コレクション操作に関連するさまざまな静的メソッドが含まれており、さまざまなコレクションの検索、並べ替え、スレッド セーフなどの操作を実装できます。
配列: java.util の特別なクラス。配列を操作するために使用され、検索、並べ替え、コピー、変換などの静的メソッドを提供します。