Javaのコレクションフレームワークの概要(2) - 汎用的なツールとコレクションのセット

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

公開された82元の記事 ウォンの賞賛124 ビュー110 000 +

おすすめ

転載: blog.csdn.net/qq_44717317/article/details/104640253