Javaの高度な技術:ジェネリック

ジェネリック

コンセプト:

  • パブリッククラスLinkedListの
  • AbstractSequentialListを拡張します
  • 器具一覧のDeque、Cloneableを、java.io.Serializableの{}
  • パブリックインターフェース両端キューが} {キューを拡張します
  • パブリックインターフェースキュー} {コレクションを拡張します
  • パブリックインターフェースコレクション} {反復処理可能に延びています

私たちのコレクションを開始する前に、あなたが最初のジェネリックであるかを理解しなければならないので、私たちは、上記のコードで表示されます<?>それがジェネリック医薬品と呼ばれ、それが何であるかをされており、一緒に使用するために使用されるオブジェクトの収集。そして、一般的な概念は、現在主流の開発アプローチで強化プログラム、で、非常に重要です。

ジェネリックです(ジェネリック)は、仮想マシンレベル、より読みやすく、提供のヒントを提供するために、実際には、基本的に小コンパイラ「シンタックスシュガー」とJDK1.5の新機能です。それは存在しない、いわゆる「汎用」の概念です。

役割:

  • コレクション、セキュリティチェックでは、一般的な制約タイプの要素によって定義された構文は、エラーがコンパイル時に表示されます
  • コードは、より汎用性があり、場合によっては、背後にあります
  • ジェネリック医薬品は、プログラムコードの可読性を向上させることができますが、それはJVM実行時のパフォーマンスのためだけ糖衣構文は、(そのようなものが削除されコンパイルされた、最後のソースコードには表示されません)効果なしであるのです。

一般的な宣言:
ジェネリックインターフェイスをすることができ、方法、使用戻り値:

  • java.util.Listに汎用インタフェース/クラス:
    パブリック・インタフェースCollection {}
  • 声明ジェネリックメソッド:
    公共無効印刷(E E)} {
  • 前者の方法では、バックEの発生を示す値文がむしろ普通のJavaの変数よりも、一般的なもので返します。

一般名:

  • E - 要素(コレクションが要素に格納されているので、コレクションに使用されます)
  • T - タイプ(Javaクラス)
  • K - キー(键)
  • V - バリュー(価値)
  • N - 番号(数値型)
  • ? - 不確実性のJavaの型を示します
public class Test1 {
    public static void main(String[] args) {
       int[] a = new int[3];
       a[0]=1;
       a[1]=2;   
       //int类型的数组,规定了数组里的数据类型,类型不对就报错。
//     a[2]="hello";       
       //1,泛型的标志<>
       //2,泛型的好处:规定了数据的类型,不能想放什么数据就放什么类型,要遵守泛型规定的类型
       //3,泛型的数据类型只能是引用类型,不能是基本类型
       List<Integer> list = new ArrayList<Integer>();
       list.add(1);
       list.add(2);
       
//4,如果类型不对,把运行时期才会 报的错ClassCastException直接在编译时期就报出来

//     list.add("a");
//     list.add('b');       
       Iterator it = list.iterator();
       while(it.hasNext()) {
           Integer s = (Integer) it.next();
           System.out.println(s);
       }      
    }
  • コードは、より汎用性があります
  • 多型を達成するための従来の方法、同じ名前のメソッドをオーバーロードすることによって、パラメータの異なるタイプ。
public class TestOldStyle {
    public static void print(Integer[] dArray) {
       for( Integer d : dArray) {
           System.out.println(d);
       }
    } 
    
    public static void print( String[] sArray) {
       for( String s : sArray) {
           System.out.println(s);
       }
    }   
    
    public static void main(String[] args) {
       Integer[] scores = new Integer[]{100,98,80};
       String[] names = new String[]{"语文","数学","英语"};      
       TestOldStyle.print(scores);
       TestOldStyle.print(names);
    }
}

一般的な方法:

public class TestGenarics {
    public static <E> void print(E[] arr) {
       for(E e : arr) {
           System.out.println(e);
       }
    } 
    
    public static void main(String[] args) {
       Integer[] scores = new Integer[]{ 100,98,80 };
       String[] names = new String[]{ "语文","数学","英语" };
       Double[] moneys = new Double[] { 10.1,20.2,30.3 };      
       TestGenarics.print(scores);
       TestGenarics.print(names);
       TestGenarics.print(moneys);
    }
}

コレクションインタフェース

概要:

  • 英語の名前のコレクションは、オブジェクトのデータ構造を格納するために使用されます。前記可変の長さ、及びコレクションは異なるタイプのオブジェクトに格納することができます。そして、バッチでオブジェクトのセットを動作させる方法を提供します。
  • アレイ短所:複雑な不変の長さが固定され、シングルアクセスモード、挿入、または削除操作。

継承構造コレクション
ここに画像を挿入説明

>Collection接口

>-- List接口  : 数据有序,可以重复。

   -- ArrayList子类

   -- LinkedList子类

>-- Set接口  : 数据无序,不可以存重复值

   -- HashSet子类

>-- Map接口  : 键值对存数据

   -- HashMap

>-- Collections工具类
一般的な方法:
  • ブールの追加(E電子):添加元素。
  • ブールのaddAll(コレクションC):大規模なコレクションに小さなセットを追加します。
  • ブールは、(オブジェクトo)含まれています。このコレクションは、指定された要素が含まれている場合、それはtrueを返します。
  • ブールのisEmpty():このコレクションの要素がない場合は、trueを返します。
  • イテレータイテレータ():このコレクションの要素にイテレータを返します。
  • ブール削除(オブジェクトo)このコレクションから、指定された要素の単一のインスタンスを除去しました。
  • int型のサイズは():このコレクションの要素数を返します。
  • OBJEC []のtoArrayは():オブジェクトの配列を返します

Listインタフェース:

(また、配列としても知られる)順序付きコレクション。このユーザインタフェースは、正確に各リスト要素の挿入位置に制御することができます。ユーザは、インデックス(リスト内の位置)の整数ベースの要素にアクセスし、リスト内の要素を検索することができます。

特徴:
1、データは、順序付けられた
反復記憶素子せる、2
3は、要素インデックスを有します

一般的な方法:

反復子反復子()

  •      返回此列表元素的列表迭代器(按适当顺序)。
    

反復子反復子(int型のインデックス)

  •      返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
    

無効アドオン(int型のインデックス、E要素)

  •      在列表的指定位置插入指定元素(可选操作)。
    

ブールのaddAll(int型のインデックス、コレクション<?拡張E> C)

  •      将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
    

リストのsubList(int型fromIndexの、INTたtoIndex)

  • 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
    

EのGET(int型のインデックス)

  •      返回列表中指定位置的元素。  
    

int型のindexOf(オブジェクトo)

  •      返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
    

配列リスト

概要:

  1. 存在于java.util包中。
    
  2. 内部用数组存放数据,封装了数组的操作,每个对象都有下标。
    
  3. 内部数组默认初始容量是10。如果不够会以1.5倍容量增长。
    
  4. 查询快,增删数据效率会降低。
    

オブジェクトを作成します。

  • 新しいArrayListを():初期容量10

一般的な試験方法:

public class Test3_AL {
       public static void main(String[] args) {
              ArrayList list = new ArrayList();
              list.add("aaa");//存入数据
              list.add("123");
              list.add("ccc");
              list.add("ddd");
              System.out.println(list);//list中内容
              System.out.println(list.size());//集合长度
              System.out.println(list.get(1));//根据下标获取元素                     
              System.out.println();
              System.out.println(list.remove(2));//移除下标对应的元素
              System.out.println(list);   
                                
               //下标遍历
	for (int i = 0; i < list.size(); i++) {
		System.out.print(list.get(i));
}
                     
       //Iterator迭代遍历,封装了下标
                     Iterator<String> it = list.iterator();
                     while (it.hasNext()) {//如果有数据
                            String s = it.next();//一个一个向后遍历
                            System.out.println(s);
                     }      
         }
}

LinkedListの

ここに画像を挿入説明
一般的な方法:

  • 追加()を取得()
  • サイズ()
  • 削除(I)
  • 削除(データ)
  • イテレータ()
  • addFirst()addLast()
  • getFirstと()GetLastの()
  • removeFirstと()removeLast()

テストは反復処理、二重リンクリスト:低い標準トラバース効率は、高効率反復処理します

public class tt {
       public static void main(String[] args) throws Exception {
              LinkedList ll = new LinkedList ();
              for (int i = 0; i < 100000; i++) {
                     ll.add(100);
              }
              f1(ll);
              f2(ll);
       } 
       private static void f2(LinkedList<Integer> ll) {
              long t = System.currentTimeMillis();
              Iterator it = ll.iterator();
              while(it.hasNext()) {
                     it.next();
              }
              t = System.currentTimeMillis()-t;
              System.out.println("=====iterator========="+t);//16
       } 
       private static void f1(LinkedList<Integer> ll) {
              long t = System.currentTimeMillis();
              for (int i = 0; i < ll.size(); i++) {
                     ll.get(i);
              }
              long t1 = System.currentTimeMillis();
              System.out.println("~~~~for~~~~~~~"+(t1-t));//9078
       }
}

公開された36元の記事 ウォン称賛13 ビュー1061

おすすめ

転載: blog.csdn.net/weixin_44598691/article/details/104847105