(i)コレクションとコレクション
どちらもjava.utilパッケージの下にあります。違いは次のとおりです。
コレクションは、リストセットなどの一般的なサブインターフェイスを備えたコレクションインターフェイスであり、コレクションフレームワークグラフの最初のノードです。収集オブジェクトで基本操作を実行するための一連の方法を提供します。
一般的な方法は次のとおりです。
boolean add(e e)容器に要素を追加します。 int size()コレクションの要素の数を返します。 boolean isempty()は、コンテナが空であるかどうかを決定します。 Booleanが含まれます(オブジェクトo)このコレクションに指定された要素が含まれている場合、trueを返し、equals()メソッドはここで使用されます。 Boolean remove(オブジェクトO)は、指定された要素のインスタンスを削除します。等
コレクションは、収集操作のためのさまざまな静的多型方法を含むラッパークラスです。これには、コレクションで動作する多型アルゴリズム、つまり指定されたコレクションでサポートされている新しいコレクションを返す「ラッパー」などが含まれています。
一般的な方法は次のとおりです。
void sort(list)リストの内容をソートします。
ここで(PS:sort()の次の説明は、オブジェクトアレイまたはリストの並べ替えとコレクションのソート原則に関する簡単な説明から抜粋していることに注意してください。それはリストとコレクションのソートの起源を追跡し、それを非常に明確に書き込みます)
この並べ替え()関数のソート本体はarrays.sort()です。
@suppresswarnings( "unchecked")public static <tは比較可能<? Super t >> void sort(list <t> list){object [] array = list.toarray(); arrays.sort(array); int i = 0; listiterator <t> it = list.listiterator(); while(it.hasnext()){it.next(); it.set((t)array [i ++]); }} arrays.sort()では、comparabletimsort.sort(object [] a)を介して実装されていることがわかります。 public static void sort(object [] array){// android changed canparabletimsort.sort(array);を開始します。 // Android-changedを終了}静的void sort(object [] a)to static void sort(object [] a、int lo、int hi)private static void binarysort(object [] a、int lo、int hi、int start)。 BinarySortでは、サイズの比較に使用される部品は次のとおりです。比較可能な<Object> pivot =(comparable)a [start]; int left = lo; int right = start;左<=右; while(左<右){int mid =(左 +右)>>> 1; if(pivot.compareto(a [mid])<0)right = mid;それ以外の場合は、左= MID + 1; }同等のインターフェイスの唯一の方法は、バイナリ検索で使用されます:compareto()。すべてのカスタムクラスがコンテナにロードされ、比較する必要がある場合は、比較可能なインターフェイスを実装するか、比較クラスを継承し、比較()メソッドをオーバーライドする必要があります。
int binarysearch(listオブジェクト)シーケンシャルリストコンテナの場合、半分の発見方法は、指定されたオブジェクトを見つけるために使用されます。 void Reverse(list)は、リストコンテナ内のオブジェクトを逆の順序で配置します。等
(ii)イテレーターとイテラブル
まず、iterableはjava.langパッケージの下にあり、イテレーターはjava.utilパッケージの下にあります。コレクションフレームワークでは、3つの方法がIteratorインターフェイスで定義されています:boolean hasnext(); e next(); void remove()。 Iterableは1つの方法のみを定義します。Iterator()、返品値はIteratorインターフェイスを実装するオブジェクトです。コレクションは反復可能なスーパーインターフェイスを継承しているため、コレクションフレームワークのすべての実装クラスにはIterator()メソッドがあり、多型により、イテレーターの参照がイテレーターを実装する現在のコレクションのパーツ(これらの3つの方法)にアクセスできます。この時点で要素を削除する必要がある場合、Iteratorはこのコレクション操作のロックを完了するため、Iteratorを使用したループトラバーサル中にIteratorのremove()メソッドのみを使用でき、コレクション独自のremove(オブジェクト)メソッドを使用できません。
では、なぜ反復可能なインターフェイスを実装する必要があるのでしょうか? Iteratorインターフェイスを直接実装してみませんか?これにより、コレクションクラスはこれらの3つの方法を直接継承できますか?
Iterableインターフェイスを実装するが、Iteratorインターフェイスを直接実装しないでください。
それについて注意深く考え、理にかなっています。
なぜなら、IteratorインターフェイスのコアメソッドNext()またはHasNext()は、イテレーターの現在の反復位置に依存するからです。
コレクションがイテレーターインターフェイスを直接実装する場合、現在の反復位置のデータ(ポインター)を含むコレクションオブジェクトに必然的につながります。
現在の反復位置がプリセットされていないため、異なるメソッド間でコレクションを渡すと、次の()メソッドの結果は予測不可能になります。
reset()メソッドがIteratorインターフェイスに追加され、現在のイテレーション位置をリセットしない限り。
しかし、この場合、コレクションには同時に現在のイテレーションの場所が1つしかないことができます。
反復性は当てはまりません。各コールは、ゼロからカウントされるイテレーターを返します。
複数のイテレーターは互いに干渉しません。
上記の記事は、Javaコレクションのいくつかの混乱する知識ポイント(詳細な説明)に基づいています。私はそれがあなたに参照を与えることができることを願っています、そしてあなたがwulin.comをもっとサポートできることを願っています。