黑馬程式設計師---泛型
阿新 • • 發佈:2019-02-13
1. 泛型是提供給javac編譯器使用的,可以限定集合中的輸入型別,讓編譯器擋住程式中的非法輸入,編譯器編譯代理性說明的集合時會除掉“型別”資訊,使得程式執行行旅不受影響,對於引數化的反省型別,getClass()方法的返回值和原始型別完全一樣。由於編譯生成的位元組碼會去掉泛型的型別資訊,只要能跳過編譯器,就可以往某個泛型集合中加入其它型別的資料,例如,反射得到集合,再呼叫其add方法即可。
2. 引數化型別與原始型別相容性:
a) 引數化型別可以引用例項化型別的物件
Collection<String> c = new Vection();
b) 原始型別可以引用一個引數化型別的物件
Collection<String> c = new Vection()<String>;
3. 引數化型別不考慮型別引數的繼承關係:
Vector<String> v =new Vector<Object>();//錯誤
Vector<Object> v =new Vector<String> ();//錯誤
4. 建立陣列例項時,陣列的元素不能使用引數化的型別
Vector<Integer> t[ ] vectorList = new Vector<Integer> [10]; //錯誤
5. 只有引用型別才能作為泛型方法的實際引數型別,不能是基本型別
6. <V extends Serializable & clonwable> 限定上限為Serializable和clonwable的子類
7. 在泛型中可以同時有多個型別引數,在定義它們的尖括號中用“,”分開
8. 泛型型別的推斷
a) 優先考慮返回值型別
b) 根據床底引數型別的傳遞性
c) 去不同傳遞型別的交集
HashCode方法的作用:
HashCode()方法講一個集合分成若干個區域,元素在集合中存放是通過計算得到HashCode值決定方法哦那個區域中,並在該區域中呼叫equals()方法依次比較已存在的元素是否相同,若相同不存放,若都不相同存放。
提高了程式碼的效率和效能 只有在Hashset和HashMap中才起作用
2. 引數化型別與原始型別相容性:
a) 引數化型別可以引用例項化型別的物件
Collection<String> c = new Vection();
b) 原始型別可以引用一個引數化型別的物件
Collection<String> c = new Vection()<String>;
3. 引數化型別不考慮型別引數的繼承關係:
Vector<String> v =new Vector<Object>();//錯誤
Vector<Object> v =new Vector<String> ();//錯誤
4. 建立陣列例項時,陣列的元素不能使用引數化的型別
Vector<Integer> t[ ] vectorList = new Vector<Integer> [10]; //錯誤
5. 只有引用型別才能作為泛型方法的實際引數型別,不能是基本型別
6. <V extends Serializable & clonwable> 限定上限為Serializable和clonwable的子類
7. 在泛型中可以同時有多個型別引數,在定義它們的尖括號中用“,”分開
8. 泛型型別的推斷
a) 優先考慮返回值型別
b) 根據床底引數型別的傳遞性
c) 去不同傳遞型別的交集
HashCode方法的作用:
HashCode()方法講一個集合分成若干個區域,元素在集合中存放是通過計算得到HashCode值決定方法哦那個區域中,並在該區域中呼叫equals()方法依次比較已存在的元素是否相同,若相同不存放,若都不相同存放。
提高了程式碼的效率和效能 只有在Hashset和HashMap中才起作用