標籤:泛型 增強型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泛型機制