1. 在集合中使用泛型之前的例子
@Test
public void test1(){
ArrayList list = new ArrayList();
//需求:存放學生的成績
list.add(78);
list.add(76);
list.add(89);
list.add(88);
//問題一:類型不安全
// list.add("Tom");
for(Object score : list){
//問題二:強轉時,可能出現ClassCastException
int stuScore = (Integer) score;
System.out.println(stuScore);
}
}
圖示:

2. 在集合中使用泛型例子1
@Test
public void test2(){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(78);
list.add(87);
list.add(99);
list.add(65);
//編譯時,就會進行類型檢查,保證數據的安全
// list.add("Tom");
//方式一:
// for(Integer score : list){
// //避免了強轉操作
// int stuScore = score;
//
// System.out.println(stuScore);
//
// }
//方式二:
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
int stuScore = iterator.next();
System.out.println(stuScore);
}
}
圖示:

3. 在集合中使用泛型例子2
//在集合中使用泛型的情況:以HashMap為例
@Test
public void test3(){
// Map<String,Integer> map = new HashMap<String,Integer>();
//jdk7新特性:類型推斷
Map<String,Integer> map = new HashMap<>();
map.put("Tom",87);
map.put("Jerry",87);
map.put("Jack",67);
// map.put(123,"ABC");
//泛型的嵌套
Set<Map.Entry<String,Integer>> entry = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = entry.iterator();
while(iterator.hasNext()){
Map.Entry<String, Integer> e = iterator.next();
String key = e.getKey();
Integer value = e.getValue();
System.out.println(key + "----" + value);
}
}
4. 集合中使用泛型總結:
- ① 集合接口或集合類在jdk5.0時都修改為帶泛型的結構。
- ② 在實例化集合類時,可以指明具體的泛型類型
- ③ 指明完以后,在集合類或接口中凡是定義類或接口時,內部結構(比如:方法、構造器、屬性等)使用到類的泛型的位置,都指定為實例化的泛型類型。
- 比如:add(E e) --->實例化以后:add(Integer e)
- ④ 注意點:泛型的類型必須是類,不能是基本數據類型。需要用到基本數據類型的位置,拿包裝類替換
- ⑤ 如果實例化時,沒指明泛型的類型。默認類型為java.lang.Object類型。