入門
地図コレクションインターフェイスおよびインターフェイスは、ルート・インタフェースのJavaコレクションフレームワーク、リスト、キュー、設定およびその他のインターフェイスは、いくつかの反復要素のコレクションを可能にCollectionインタフェースを、達成することである、といくつかのコレクションが整然としたことができます。それは我々がJDKがCollectionインタフェースの直接の実現を提供していないので、特性の異なるコレクションを使用する必要があるため、正確であるが、Collectionインタフェースを継承したものより特定のインターフェイス上で、これらのインタフェースを実装するための具体的な実装クラスをしましょう。要するに、Collectionインタフェースは、単に共通のうち、すべての種類のセットから抽出され、リスト、キューは、インターフェースの設定共通して抽出された特定のタイプ(注文または無秩序、繰り返しまたは重度のすることはできません)、のコレクションからです以下のようなリストインタフェースは共通して抽出されたこのコレクションのリストのために特別に設計されています。
コレクションは、あなたがそれを介して複数の実装クラスを切り替えることができ、モデル指向のプログラミング・インターフェースであり、これは、オブジェクト指向プログラミングの魅力の一つです。
まず、インタフェース定義
パブリックインタフェースCollection <E>を反復処理可能<E>を拡張
直接CollectionインタフェースのIterableインタフェースから継承されたので、すべてのコレクションのコレクションのために、各ループサポートしています。
第二に、メソッド定義
要素の数を数え、要素が削除を検索変更、要素の有無を判断し、空、など、これらの共通の操作コレクション抽出パッケージ:コレクションのために、我々は、操作のいくつかよりも何もしたくありません。
(A)クエリメソッド
(1)
int型のサイズ();
数にInteger.MAX_VALUEよりも大きい場合は、Integer.MAX_VALUEを返し、セット内の要素の数を返します
(2)
ブールのisEmpty()。
セットは、そうでない場合はfalse、要素数が0であるか否か、すなわち、空であることが空である場合に真を返すかどうかを決定します
(3)
ブール(オブジェクトo)を含有します。
コレクションに指定された要素が含まれているかどうかを決定する(等号を使用して()メソッド)
イテレータ<E>反復子();
反復はセットで反復子を返すことがあります。
(5)
オブジェクト[]のtoArray()。
配列のすべての要素のコレクションが含まれてい返します
返された配列を新たに割り当てられ、コレクションは、配列への参照を保持していなかったので、メソッドの呼び出し側は自由に、安全に、配列を変更することができます
<T> T []のtoArray(T [] a)は、
上記のように、コレクションのすべての要素を含む配列を返します
しかし、アレイの種類が指定されている:配列を実行するときの動作と指定された配列の型の同じ型が返されます。指定された配列のサイズは、コレクションのすべての要素を保持することができれば、リターンはまだ指定された配列に含まれるすべての要素のコレクション(アレイのサイズは、集合の要素の指定された数よりも大きい場合、テーブルサイズの後にアレイのすべての要素が設定されているが返さこのコレクション内の新しい配列の指定された配列は、型を持つラン、およびサイズを割り当て、そうでない場合は、NULL)に割り当てられました。
すなわち、この方法は正確に配列の戻り型、および指定されたサイズ分布のアレイを制御するために使用することが可能です。
指定された配列がnullの場合は、NullPointerExceptionがスローされます。
指定された配列型を実行している場合、親クラスの各要素の実行時の型は、ArrayStoreExceptionが投げているときに設定されていません
ただのtoArray(新しいオブジェクト[0])と、我々は文字列配列のコレクションxを返すようにしたい場合は、内のtoArray()メソッドに相当し、
文字列[] Y = x.toArray(新しいString [0])。
二つのtoArray()メソッドは、配列やコレクションの間のブリッジとして機能し、我々は、コレクションのすべての種類を変換するだけでなく、多くの場合、これらの2つの方法を使用します。
第二に、操作を変更します
ブールの追加(E電子);
コレクションに指定された要素を追加します。
追加した場合は、(このメソッドの後にコレクションが変更の終わりと呼ばれる)はtrueを返します。コレクションは重複を許可しないと、既に指定された要素がある場合は、falseを返します
追加される要素の異なるタイプのコレクションが制限される場合があり、例えば、コレクションを拒否し、いくつかはnull要素を追加して、添加元素の種類にいくつかのコレクションはいくつかの制限を行いました。コレクションは、(コレクションの反復が要素を指定されていることはできません場合を除き)要素を追加拒否する理由がある場合は、例外をスローだけではなく、falseを返す必要があります。
コレクションの特定の種類は、このメソッドはUnsupportedOperationExceptionをスローサポートしていない場合。
コレクションが指定されたデータ要素のタイプを追加することはできません場合は、ClassCastExceptionがスローされます。
指定された要素が空集合であり、null要素が許可されていない場合、NullPointerExceptionがスローされます。
要素を指定されたパラメータの一部がコレクションに追加された要素を防ぐ場合、IllegalArgumentExceptionがスローされます。
理由はいくつかの制約から、指定された要素を挿入し、コレクションに追加することができない場合は、IllegalStateExceptionがスローされます
ブール削除(オブジェクトo)
要素の集合とoをオブジェクトを削除する、すなわち、要素eの一つ以上のコレクションを満たす(O == NULL E == NULL :? O.equals(E))を削除し、等しいです
そのような要素が存在する場合、正常にtrueを返し、削除、そうでない場合はfalse
指定された要素が空集合であり、null要素が許可されていない場合、NullPointerExceptionがスローされます。
指定された要素タイプがセットと互換性がない場合は、ClassCastExceptionをくぼみました。
コレクションは、この操作をサポートしていない場合は、UnsupportedOperationExceptionがスロー
第三に、一括操作
(1)
ブールのcontainsAll(コレクションC <?>);
指定されたコレクションのすべての要素を分析することバウンド含まれてい
それがない場合は、trueを返し、そうでない場合はfalse
指定されたコレクションの1つの以上の要素セットは、このと互換性がない場合は、ClassCastExceptionがスロー。
1つまたは複数のヌル要素のセット指定し、これはコレクションnull要素を許可しない場合は、NullPointerExceptionがスローされます
(2)
ブールのaddAll(コレクションC <拡張E?>);
このコレクション内のすべての要素の指定されたコレクションを追加します。
このメソッドが呼び出された後、コレクションが変更され、場合は、trueを返します
この操作の進行は、指定されたコレクションが変更されたときに注意してください、しかし、この操作の動作は不定となります。たとえば、指定されたコレクション自体が設定されており、このセットが空でないとき。
コレクションの特定の種類は、このメソッドはUnsupportedOperationExceptionをスローサポートしていない場合。
データセットの種類は、指定されたコレクションの要素を追加することはできません場合は、ClassCastExceptionがスローされます。
要素がnullで、指定されたコレクションセットがnull要素を許可しない場合は、NullPointerExceptionがスローされます。
要素の指定されたセットのパラメータのいくつかは、コレクションに追加された要素を防ぐ場合、IllegalArgumentExceptionがスローされます。
制限の一部はコレクションに追加することができないので、要素が指定されたコレクションに挿入されると、IllegalStateExceptionがスローされます
(3)
ブールのremoveAll(コレクションC <?>);
削除コレクションは、すべての要素の指定したコレクションが含まれています
コレクションが変更された後にこのメソッドが呼び出された場合は、trueを返します
コレクションの特定の種類は、このメソッドはUnsupportedOperationExceptionをスローサポートしていない場合。
このコレクションの要素のうちの1つまたは複数のセットを指定するときに互換性がない、ClassCastExceptionがスロー。
指定されたコレクションセットの1つの以上の要素がnullとnull要素である場合には許可されていない、NullPointerExceptionがスローされます。
(4)
ブールのretainAll(コレクションC <?>);
指定されたセット、方法及び上記の逆の方法に含まれるすべての要素のセットのみを保持します
このメソッドが呼び出された後、コレクションが変更されている、場合、trueを返します
コレクションの特定の種類は、このメソッドはUnsupportedOperationExceptionをスローサポートしていない場合。
このコレクションの要素のうちの1つまたは複数のセットを指定するときに互換性がない、ClassCastExceptionがスロー。
指定されたコレクションセットの1つの以上の要素がnullとnull要素である場合には許可されていない、NullPointerExceptionがスローされます。
(5)
明確無効();
コレクションが正常に削除され、このコレクション内のすべての要素を削除した後、空であります
このコレクションはサポートしていない場合、このメソッドはUnsupportedOperationExceptionをスロー
第四に、比較とハッシュ
(1)
ブール等しい(オブジェクトo)
指定されたオブジェクトがセットと等しいかどうかを比較
ここでこの抽象メソッドは、すべてのサブクラスは、対等の正しい動作を保証するために、このメソッドをオーバーライドすることを確認することです。特定の実装クラスに応じて、均等にするものも。
デフォルトの実装クラスが)(Objectクラスの継承の方法に等しいので、我々は、同等の判断のための具体的な需要は、コレクションの直接の実装はなることはできません場合は、Collectionインタフェースを実装するクラスを作成する場合(2つのオブジェクトが同じ比較オブジェクト);あなたは、「値の比較」を必要とする場合は、このメソッドをオーバーライドする必要があります。
一般的なルールは、Objectクラス()メソッドは、a.equalsに等しい(b)の場合とb.equalsは、(a)は、リストのために、等号を()に設定した場合にのみ、ありますのみ、リストに等しくなるように設定し、リストだけセットに等しいです。したがって、我々のカスタムのequals()メソッドと、ときセットリストとの比較はfalseを返す必要があります。設定とリストのインターフェイスを実現しながら、同じ論理が、私たちはクラスを作成することはできません。
(2)
int型のhashCode();
ハッシュコード値セットを返します。
ここでは、この方法の要約は、同じことが、すべてのサブクラスがhashCodeメソッドの正しい動作を保証するために、このメソッドをオーバーライドすることを確認することです
注:オブジェクトのequals()メソッドを書き換えるの任意の種類は、次の一般的な規則を満たすために、オブジェクトのhashCode()メソッドを書き換える必要があります。
c1.equals(C2)c1.hashCode()== c2.hashCode()は、同じ結果を持っていることを意味
他の5つの方法
JDK 8コレクションはまた、いくつかのメソッドのデフォルト実装を提供します
(1)
デフォルトブールremoveIf(述語フィルタ<スーパーE?>){ Objects.requireNonNull(フィルター); ブール= falseを取り除きます。 最終的なイテレータ<E>各=イテレータ()。 一方、(each.hasNext()){ IF(filter.test(each.next())){ each.remove()。 =真削除。 } } 戻り除去。 }
与えられた条件のフィルタ要素(イテレータに従ってアクセス順序)と一致コレクションを削除
一つ以上の要素が削除されると、その後、trueを返し、そうでない場合はfalse
あなたは、コレクションから削除される要素ごとに与えられた基準に一致するすべての要素((削除時に通じイテレータを削除する)方法は削除)のセットで、このメソッドは繰り返し処理を見ることができます
与えられたフィルタがnullの場合は、NullPointerExceptionがスロー。
要素をコレクションから削除することができない場合は、UnsupportedExceptionを投げます
(2)
@Override デフォルトSpliterator <E> spliterator(){ Spliterators.spliterator(この、0)を返します。 }
Spliterator上の要素の集合を作成し、この方法はspliterator反復処理可能インタフェース()メソッドをカバー
Spliteratorストリームインタフェースを並列に処理することができる複数の部分に分解することができます。実際の使用では、我々はめったにSpliterator直接使用しないが、同様のイテレータとしてそれを使用します。例えば、Spliterator <T> spliterator = list.spliterator()。
収集インターフェースは、この方法を利用して、データ収集の二つの平行な処理方法に寄与するSpliteratorのspliterator()を呼び出すことによって得られるストリーム()、parallelStream()メソッドを提供します。
(3)
デフォルトストリーム<E>ストリーム(){ StreamSupport.stream(偽spliteratorを())を返します。 }
のソースとして設定されたフローを戻すために
(4)
デフォルトストリーム<E> parallelStream(){ StreamSupport.stream(spliterator()、true)を返します。 }
並列ストリームの可能なソースにとしてコレクションを返します。