1. 程式人生 > >黑馬程式設計師---泛型

黑馬程式設計師---泛型

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中才起作用