【javaSE】Java泛型機制

來源:互聯網
上載者:User

標籤:泛型   增強型for迴圈   sublist   queue介面   comparable介面   

************************************************************************  ****原文:blog.csdn.net/clark_xu 徐長亮的專欄************************************************************************Java泛型機制

泛型是JavaSE5 引入的特性,泛型的本質是參數化型別。應用情境:在類,介面和方法的定義過程中,所操作的資料類型被傳入的參數指定。

例如在ArrayList類的定義中,<E>中的E為泛型參數,在建立對象是可以將類型作為參數傳遞,此時定義中的所有E將被替換為傳入的參數;

ArrayList<String> list=new ArrayList<String>();建立對象,其中add的參數類型,get方法的返回值都替換為String

若使用list.add(100)則Java編譯錯誤,因為add參數為String類型。

所有的集合類型都帶有泛型參數,這樣建立集合對象的時候可以指定放入結婚中的物件類型。而且,java編譯器會根據此類型進行類型檢查。

通過泛型,可以建立專門儲存某個對象的List集合,例如

List<Point> pointList=new LinkedList<Point>();

建立迭代器:

Iterator<Point> it=pointList.iterator();

5.1 增強型For迴圈語句

         javaSE5推出增強型For迴圈,可以應用數組和集合的遍曆。

         for(Point P: pointList){

         p.toString

}

理解為每次從pointList取出一個Point對象,然後賦值給迴圈遍曆p;實際上編譯的時候,增強型For迴圈被轉換為迭代器模式,但是不能再迴圈中進行刪除操作。

5.2 List進階5.2.1 subList方法

List的subList方法擷取子List,子List和原List佔用相同的儲存空間,對子List的操作會影原List,例如:

subList=list.subList(3,8);

subList.set(I,subList.get(I)*10);

5.2.2 Queue介面及LinkedList實現

         隊列Queue是特殊的線性表,限制訪問方式為:FIFO,即只能從一端offer添加元素,從另外一端poll取出元素

         javaSE提供了Queue介面,同事使用LinkedList實現了改介面,Queue經常進行插入刪除操作,例如:

         Queue<String> queue=new LinkedList<String>();

         Boolean offer(E e);將一個對象添加到隊尾,如果添加成功則返回true,例如

         queue.offer(“A”);queue.offer(“B”);

         E peek();返回隊首元素,但是不刪除

         E poll(); 彈出隊首元素,即從隊首刪除並且返回

5.2.3 Deque介面及LinkedList實現

Deque是Queue的子介面,定義了所謂的“雙端隊列”,即從隊列的兩端粉筆入隊和出隊

如果將Deque限制為只能從一端入隊和出隊,則可以實現棧Stack的資料結構。

5.3 List常用演算法5.3.1Comparable介面

針對對象數組或者集合中的元素進行排序時候,需要確認對象的元素的比較邏輯

public interface Comparable<T>{

         public int compareTo(T t)

}

Comparable介面定義的compareTo方法,邏輯為:

l  f返回正數,表示this大於參數對象;

l  返回負數表示this小於參數對象

l  返回0表示this等於參數對象

兩種應用情境;

(1)     JDK的某些API調用Compareable介面中的方法瞭解對象的大小關係。

(2)     Java類實現COmparable介面編寫該類對象比較邏輯;

執行個體的例子:

         Point實現Comparable介面,則泛型參數為Point類型,使得compareTo方法的參數也為Point類型,

         public class Point implements Comparable<Point>{

                   private int x,int y;

public int compareTo(Point p){

         int r1=x*x+y*y;

         int r2=p.x*p.x+p.y*p.y;

         return r1-r2;

}

}

注意:在編寫compareTo方法的時候應該注意和equals方法的一致性;

************************************************************************  ****原文:blog.csdn.net/clark_xu 徐長亮的專欄************************************************************************

【javaSE】Java泛型機制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.