黒馬プログラマ--集合フレーム(Collection、Iterator、泛型)
14670 ワード
------<a href="http://www.itheima.com" target="blank">Java 、Android 、iOS 、.Net a>、 ! -------
1.コレクションjavaは、データのセットを数セット保存することができるデータ構造を提供しており、豊富な方法を提供しており、実際の開発においては、配列よりも広く使用されることが多い.このようなデータ構造は集合になる:Collection.Collectionは、セットの関連する機能方法を定義するインターフェースである.
1)ListとSet
Collectionは2つのサブインターフェースから派生し、もう1つはListであり、もう1つはSetである.List:重複する集合と称して、その集合の中で重複する要素を保存することが許されていますが、重複要素とは何ですか?重複要素とは、同じ要素ではなく、equals方法でtrueと比較される要素のことです.Set:重複集合と呼ばれるので、この集合は同じ要素を2回のセットに預けることはできません.リストと同じです.2つの要素のequals比較結果はtrueです.
2)集合所有対象の引用
集合には参照型の要素が格納されていますが、参照型変数は実際にオブジェクトの「アドレス」が格納されていますので、実際のセットは、要素オブジェクトのスタック内のアドレスのみが記憶されています.集合の中に対象自身を預けたわけではない.
3)add()方法
Collectionは、集合に新しい要素を追加するためのadd方法を定義する.この方法は、ブーメランadd(E e)と定義されています.この方法は、与えられた要素をセットに追加し、成功すればtrueに戻ります.そうでなければfalseに戻ります.
Collection c = new ArrayList();
System.out.println(c); // []
c.add("a");
c.add("b");
c.add("c");
System.out.println(c); // [a, b, c]
ここのCollectionの後ろにあるのは汎型です.後で説明します.ここで書かなくても大丈夫です.4)contains方法
bollan contains(Object o)この方法は、与えられた要素がセットに含まれているかどうかを判断するために使用される.含めるとtrueに戻ります.そうでないとfalseに戻ります.ここで注意したいのは、集合が、要素が集合に含まれるかどうかを判断する際に、要素を使用するequalsの比較結果である.(o==null?e==null:o.equals(e))のうち、eは集合中の要素である.たとえば:
Collection cells = new ArrayList();
cells.add(new Cell(1, 2));
cells.add(new Cell(1, 3));
cells.add(new Cell(2, 2));
cells.add(new Cell(2, 3));
Cell cell = new Cell(1, 3);
// List contains equals
boolean flag = cells.contains(cell);
// Cell equals false
System.out.println(flag); // true | |
5).size、clear、isEmpty方法size方法は、現在のセットの要素の総数を取得するために使用されます.この方法は、int size()clear方法が、空セットをクリアするために使用されると定義されている.この方法は、現在のセットに要素が含まれていないかどうかを判断するためのvoid clear()isEmpty方法と定義されている.この方法は、例えば、bolean isEmpty()と定義されている.
Collection c = new HashSet();
System.out.println(c.isEmpty()); // true
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("objective-c");
// isEmpty:false, size: 5
System.out.println("isEmpty:" + c.isEmpty() + ",size: " + c.size());
c.clear();
// isEmpty:true, size: 0
System.out.println("isEmpty:" + c.isEmpty() + ", size: " + c.size());
javaは、データのセットを数セット保存することができるデータ構造を提供しており、豊富な方法を提供しており、実際の開発においては、配列よりも広く使用されることが多い.このようなデータ構造は集合になる:Collection.Collectionは、セットの関連する機能方法を定義するインターフェースである.6)addAllとcontainsAllの方法
集合もバッチ処理動作を提供する.例えば、与えられたセットのすべての要素を現在のセットに追加するためのaddAll方法.
Collection c1 = new ArrayList();
c1.add("java");
c1.add("cpp");
c1.add("php");
c1.add("c#");
c1.add("objective-c");
System.out.println(c1); // [java, cpp, php, c#, objective-c]
Collection c2 = new HashSet();
c2.addAll(c1);
System.out.println(c2); // [cpp, php, c#, java, objective-c]
containsAll方法は、現在のセットが所与のセットのすべての要素を含むかどうかを判断するために使用され、含まれるならtrueに戻る.その方法は、例えば、bootlean contains All(Collection c)と定義されている.Collection c1 = new ArrayList();
c1.add("java");
c1.add("cpp");
c1.add("php");
c1.add("c#");
c1.add("objective-c");
System.out.println(c1); // [java, cpp, php, c#, objective-c]
Collection c2 = new ArrayList();
c2.add("java");
c2.add("cpp");
System.out.println(c1.containsAll(c2)); // true
2.IteratorディショナーCollectionは、集合を巡回するための一般的な方法を提供する.ディテールを取得する方法は、Collectionで定義された方法を使用することである.Iterator Iteratorはインターフェースであり、Collectionのiterator()方法をカバーする際に、ローズマリーの実現を提供する.Iteratorは、集合要素を統合する方法を提供する.
1)has Nextとnextの方法
集合を巡る2つの主要な方法:bollan has Next():集合がまだ元素であるかどうかを判断する.E next():反復に戻る次の要素は、集合を遍歴して、「先に聞いてから取る」という方式に従うべきであり、つまり、has Next()方法の戻り値がtrueであると判断した場合、next()方法で要素を取るべきである.このことから、集合はブーメラン値によって駆動されるので、より適切にwhileループを使用して巡回していることが分かる.たとえば:
Collection c = new HashSet();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("objective-c");
Iterator it = c.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
2).remove方法ディレクタはまた、1つの方法を提供します.void remove().この方法は、集合から取得した要素を削除するためのものです.反復中にセット要素を削除したい場合は、この方法で行う必要があります.ここで注意したいのですが、集合を巡回する際には、集合自体が提供するremove方法によって要素を削除することはできません.そうでなければ、リピーターは反復時に異常を投げます.たとえば:
Collection c = new HashSet();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("objective-c");
System.out.println(c); // [cpp, php, c#, java, objective-c]
Iterator it = c.iterator();
while (it.hasNext()) {
String str = it.next();
if (str.indexOf("c") != -1) {
it.remove();
}
}
System.out.println(c); // [php, java]
3)forサイクルを強化するJava 5.0はその後、新たな特性を打ち出し、forサイクルを強化し、新循環とも呼ばれる.このループは、集合または配列の利便性のためにのみ使用される従来のループの動作には使用されません.構文:for(要素タイプe:集合または配列){循環体}新しいサイクルは新しい文法ではなく、コンパイルの過程で、コンパイラは新しいサイクルをローズマリーモードに変換します.したがって、新しいサイクルは本質的には、ローズマリーです.たとえば:
Collection c = new HashSet();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("objective-c");
for (String str : c) {
System.out.print(str.toUpperCase() + " ");
// CPP PHP C# JAVA OBJECTIVE-C
}
3.汎型メカニズム1)汎型集合における応用
汎型はJava SE 5.0が導入した特性であり、汎型の本質はパラメータ化タイプである.クラス、インターフェース、および方法の定義の間に、動作するデータタイプは、着信するパラメータによって指定される.Java汎型機構は集合フレームワークに広く適用されている.すべてのセットタイプは、一般的なパラメータを持っています.このように、セットを作成する際に、セットに入れるオブジェクトの種類を指定することができます.Javaコンパイラはこれに基づいてタイプ検査を行うことができ、コードが実行中にエラーが発生する可能性を減らすことができます.ArayListのような例を挙げます.これは定義された時にはこうなります.
public class ArrayList {
… … …
public boolean add(E e) {…};
public E get(int index) {…};
}
これにより、アラーリストを宣言する際には、クラス名の右側に一つがあることが分かります.」汎型を表しますが、中には数字の下線(数字ではできない最初の文字)を使って汎型の名前を表します.(通常は大文字で表します.もちろんこれは規定ではありません.)この場合、クラスで宣言された方法のパラメータは、戻り値の種類を汎型として定義することができます.このように、オブジェクトを作成するときには、タイプをパラメータとして渡すことができ、このとき、クラス定義のすべてのEは、着信パラメータに置き換えられます.例えば、ArayList=new ArayList()//汎型EはここでStringタイプに指定されています.
list.add(「One」)//add方法のパラメータは、Stringタイプlist.add(100)に置き換えられる.ここでコンパイルエラーが発生します.ここのパラメータはStringタイプです.