「こんにちは、アミーゴ!」

「こんにちは、エリー!」

「今日はコレクションの構造についてもう一度しっかりと理解しましょう。」

「私はこれを長い間待っていました。」

「あなたはすでにコレクションが何であるかを知っており、コレクションの操作方法も知っています。知識を厳密なシステムに体系化する時が来ました。そうすれば、多くの「なぜ」と「どのように」という疑問がなくなり、ほとんどのことが明らかになるでしょう。」

"コレクション インターフェイス。コレクションインターフェイスの継承構造は次のようになります。"

コレクションインターフェイス - 1

2 つのことに注意してください。

まず、ここに表示されるものはすべてインターフェイスです。

次に、矢印は「継承」を意味します。

「つまり、List、Set、Queue は Collection を継承しますが、Map は継承しないということでしょうか?」

「はい。抽象クラスはこれらのインターフェイスを継承し、次に、あなたが知っている実装もこれらの抽象クラスを継承します:  ArrayList、Hashtable、TreeSet… "

"その通りその通り。"

「それでは、これらのインターフェースのメソッドが何のためにあるのかを見てみましょう。」

Iterable<E>:インターフェイスのメソッド:

メソッド 説明
Iterator<T> iterator(); イテレータオブジェクトを返します。

「それでは十分ではないようです。」

「そうですね、これだけあります。反復子については以上です。今は説明しませんが、すぐに詳しく説明します。」

Collection<E>:インターフェイスのメソッド:

メソッド 説明
boolean add(E e); コレクションに要素を追加します
boolean addAll(Collection<? extends E> c); 要素をコレクションに追加します
void clear(); コレクションからすべての要素を削除します
boolean contains(Object o); コレクションに要素が含まれているかどうかを確認します。
boolean containsAll(Collection<?> c); コレクションに要素が含まれているかどうかを確認します。
boolean equals(Object o); コレクションが同等かどうかを確認します
int hashCode(); ハッシュコードを返します
boolean isEmpty(); コレクションが空かどうかを確認します。
Iterator<E> iterator(); イテレータオブジェクトを返します
boolean remove(Object o); コレクションから要素を削除します
boolean removeAll(Collection<?> c); コレクションから要素を削除します
boolean retainAll(Collection<?> c); c にない要素をすべて削除します
int size(); コレクションのサイズを返します
Object[] toArray(); コレクションを配列に変換します
<T> T[] toArray(T[] a); コレクションを配列に変換します

「私はすでにここでのすべてをしっかりと理解しています。これらの方法の半分を使用し、残りの半分にも遭遇しました。」

「わかりました、それでは続けましょう。」

 List<E>:インターフェイスのメソッド:

メソッド 説明
void add(int index, E element); コレクションの途中に要素を追加します
boolean addAll(int index, Collection<? extends E> c); 要素をコレクションに追加します
E get(int index); インデックスによって要素を返します
int indexOf(Object o); 要素のインデックス (番号) を返します。
int lastIndexOf(Object o); 最後の要素のインデックスを返します。
ListIterator<E> listIterator(); リストのイテレータを返します。
ListIterator<E> listIterator(int index); リストのイテレータを返します。
E remove(int index); インデックスによって要素を削除します
E set(int index, E element); インデックスによって新しい値を設定します
List<E> subList(int fromIndex, int toIndex); サブコレクションを返します

「ここでも、根本的に新しいことは何もありません。私はすでにコレクションについてほとんどすべてを知っています。それが嬉しくて仕方ありません。」

「そうですね、あなたを驚かせる何かが見つかると思います。しかし、インターフェースの調査を続けましょう。」

Set<E>:インターフェイスのメソッド:

メソッド 説明
メソッドがありません

「Set インターフェイスには新しいメソッドはなく、継承されるメソッドのみがあります。」

「ええ、Interable インターフェースにも何もないことが分かりました。

「その一方で、メソッドが少ないということは、覚えておくべきことも少なくなります。」

「あなたの人生を肯定する楽観主義が私を幸せにします。」

「Set インターフェイスは、SortedSet と NavigableSet というメソッドを持つ 2 つのインターフェイスによって継承されます。しかし、それらについては説明しません。そうしないと、永遠に終わりません。」

「代わりに、Java でコレクションを記述するクラスとインターフェイスの全体像を説明しましょう。」

"かかって来い。"

「じゃあ、しっかりつかんでください。」

コレクションインターフェイス - 2

「うわー、すごいですね!」

「まあ、それほど大したことではありません。また、抽象クラスは完全にオプションであることを覚えておいてください。ただし、どのクラスがどのインターフェイスを実装しているかを覚えておくとよいでしょう。これは非常に頻繁に役立ちます。」

「ああ、一部のコレクションは時代遅れと考えられていることに注意してください。」

「あれはどれですか?」

「私が話しているのは、Vector、Stack、Dictionary、および Hashtable クラスです。これらは、通常のコレクションの同期された (スレッドセーフな) バージョンです。」

「しかし、Javaは、他のスレッドからアクセスできるだけでなく、より効率的な実装を備えた多くのコレクションを備えた 特別な同時実行ライブラリを追加しました。 ConcurrentHashMap はHashtableよりもはるかに効率的です。」

「Vector、Stack、Dictionary、Hashtable コレクションを使用できますが、お勧めできません。」

「分かりました、覚えておきます。」

「ありがとう、エリー!」