jdk5 的泛型允許程序員在編寫集合代碼時,就限制集合的處理類型,從而把原來程序運行時可能發生問題,轉變爲編譯時的問題,以此提高程序的可讀性和穩定性
泛型 泛形類型須爲引用類型,不能是基本數據類型
泛型是提供給javac編譯器使用的,它用於限定集合的輸入類型,讓編譯器在源代碼級別上,即擋住向集合中插入非法數據。但編譯器編譯完帶有泛形的java程序後,生成的class文件中將不再帶有泛形信息,以此使程序運行效率不受到影響,這個過程稱之爲“擦除”。
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String value = it.next();
System.out.println(value);
}
for(String value : list){
System.out.println(value);
}
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1, "aaa");
map.put(2, "bbb");
map.put(3, "ccc");
//1.用keyset
Set<Integer> set = map.keySet();
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
Integer key = it.next();
String value = map.get(key);
System.out.println(key + "=" + value);
}
//2.用entryset
Set<Map.Entry<Integer, String>> set1 = map.entrySet();
Iterator<Map.Entry<Integer, String>> it1 = set1.iterator();
while(it1.hasNext()){
Map.Entry<Integer, String> me = it1.next();
int key = me.getKey();
String value = me.getValue();
System.out.println(key + "=" + value);
}
//3.用foreach
for(Map.Entry<Integer, String> me : map.entrySet()){
int key = me.getKey();
String value = me.getValue();
System.out.println(key + "=" + value);
}
自定義 泛型:
Java程序中的普通方法、構造方法和靜態方法中都可以使用泛型。方法使用泛形前,必須對泛形進行聲明,語法:<T> ,T可以是任意字母,但通常必須要大寫。<T>通常需放在方法的返回值聲明之前。例如:
public static <T> void doxx(T t);
聲明泛形的注意事項:類上面聲明的泛形只對類的非靜態態成員有效,類上面的靜態成員使用泛形,它們需單獨聲明
//編寫一個泛形方法,實現數組元素的交換。
public <T> void swap(T arr[],int index1,int index2){
T temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
//編寫一個泛形方法,接收一個任意數組,並顛倒數組中的所有元素。
public <T> void reverse(T arr[]){
int start = 0;
int end = arr.length-1;
for(;;){
if(start>=end){
break;
}
T temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}