Javaのコレクションフレームワークの概要() - リストのそれらの事インタフェース
展望レビュー
任意の型のオブジェクトを追加することができ、コレクションで、その結果、指定が無いことは明らかである、ArrayListの程度クラス、見つけるのは難しいことではありません、店舗5種類の内部コレクションです。だから、エラーのdoublr種類を印刷するとき。不安の種類の一例である、表示。
public class TestArrayList {
public static void main(String[] args){
ArrayList list = new ArrayList();
list.add(10);
list.add(10.0);
list.add("Hello");
list.add('A');
list.add(true);
double sum = 0;
for (int i = 0; i < list.size(); i++) {
sum += (double)list.get(i);
}
}
}
スレッドの例外「メイン」にjava.lang.ClassCastException:
java.lang.Integerのはjava.lang.Doubleat list.TestArrayList.main(TestArrayList.java:16)にキャストすることができない良好アレイ、パンの導入を調整するために、したがってタイプ
ジェネリックコレクション
コンセプト:パラメータ化された型、タイプセーフなコレクション、強制コレクション要素の型は一致している必要があります。
特長:
- あなたは、実行時例外がスローされるのではなく、コンパイル時にチェックすることができます
- アクセス時間。変換(アンボクシング)を入力する必要はありません
- 別の一般的な参照は、お互いにポリモーフィック型の不在を割り当てることはできません
基本的なジェネリック
ArrayList<Double> list = new ArrayList<Double>();
インターフェイスまたはリストの実装の他の種類のリストは、ジェネリックの定義と同様です。
高度なジェネリック
例1.ジェネリック
- ジェネリッククラス:新しいデータ型の一般的な定義オブジェクト
public class AdvancedGeneric {
public static void main(String[] args){
//在new对象的时候定义泛型的数据类型
MyClass<Integer> myClass = new MyClass<Integer>();
myClass.classMethod(12);
}
}
//类中的泛型
class MyClass<E>{
public void classMethod(E e){
}
}
2.一般的なインタフェース
- ジェネリックインターフェイス:クラスジェネリックデータ型を実装します
public class AdvancedGeneric {
public static void main(String[] args){
//泛型接口
MyImplClass myImplClass = new MyImplClass();
myImplClass.interfaceMethod(true);
}
}
//接口中的泛型
interface MyInterface<T>{
void interfaceMethod(T t);
}
//实现接口的类 此处定义泛型的数据类型
class MyImplClass implements MyInterface<Boolean>{
@Override
public void interfaceMethod(Boolean b) {
}
}
3.静的ジェネリック
- ジェネリック静的クラス:静的メソッドでは、一般的なデータ型を定義
public class AdvancedGeneric {
public static void main(String[] args){
//调用静态类
MyStaticClass myStaticClass = new MyStaticClass();
myStaticClass.method(123);
myStaticClass.method(true);
}
//静态类:在静态方法中定义泛型的数据类型
class MyStaticClass {
public static<T> void method(T t){
}
}
しかし、静的では一般的なオブジェクト内のデータの種類に制限は我々が通過する必要がある場合に、ではないと思われるnumber
のデータ型の値をどのようにそれを行うには?
public class AdvancedGeneric {
public static void main(String[] args){
//调用静态类
MyStaticClass myStaticClass = new MyStaticClass();
myStaticClass.method(123);
// myStaticClass.method(true); //类型错误
}
//静态类
class MyStaticClass {
public static<T extends Number> void method(T t){
System.out.println(t);
}
}
上部は、ワイルドカードを結合した:<? extends T>
従って、野生型がパラメータ化されてもよく、上部(それ自体を含む)タイプの結合を表すT
又はT
サブクラス。
下部は、ワイルドカード結合:<? super T>
オブジェクトまで、パラメータ化された型は、(それ自体を含む)Tのスーパータイプである第一の層を表します。
コレクションツール
- ツールのセット:以外の一般的なアクセス方法のセットを定義
方法 | 説明 |
---|---|
public static void reverse(List<?> list) |
セット内の要素の順序を逆に |
public static void shuffle(List<?> list) |
ランダム系列集合要素をリセット |
public static void sort(List<?> list) |
昇順(要素はComparableインタフェースを実装する必要があります) |
- 注入
sort
引数のメソッドT
を実装しなければならないComparable
インタフェースを
//使用sort方法必须实现Comparable接口
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
使用例:
public class testCollections {
public static void main(String[] args){
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
// Collections.reverse(list);
//Collections.shuffle(list);
Collections.sort(list);
for(Integer integer : list){
System.out.println("运行结果:"+integer);
}
}
}
----sort------------ -------reverse----------------shuffle----------
运行结果:1 运行结果:9 运行结果:7
运行结果:3 运行结果:7 运行结果:9
运行结果:5 运行结果:5 运行结果:1
运行结果:7 运行结果:3 运行结果:5
运行结果:9 运行结果:1 运行结果:3