泛型
表示集合中 保存的數據的類型
< E > 就代表 要保存的元素的類型
後面的 <> 要跟前面的 <> 泛型保持一致
jdk1.7 菱形泛型: 前面聲明瞭泛型 後面的泛型可以不寫
默認類型一致
ArrayList<String> list = new ArrayList<>();
這樣就表明了集合中要保存的數據的類型是String類型
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
// 用迭代器遍歷
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
而且在聲明瞭泛型後 還可以省去強轉類型的麻煩
寫泛型可以讓類型轉換異常在編譯時就會報錯
泛型類 (聲明時 <> 中的字母可以隨便定義)
泛型類的類型 在初始化這個類的對象時確定
public class A<M> {
}
聲明不同泛型的方法 在調用泛型方法時
指定泛型的類型
只有聲明過的泛型 才能使用
public<Z> void print(Z z) {
System.out.println(z);
}
靜態方法中不能直接使用泛型類的泛型
因爲在靜態方法被加載的時候
泛型類的對象可能還沒有被創建出來
非要調用時 可以重新聲明一個泛型
public static<W> void fun(W w) {
System.out.println(w);
}
? extends E(向下限定) —— 給定上限(E)
? (是子類) 繼承 E(是父類)
?只能是E類的 子類
? super E(向上限定) —— 給定下限(E)
?(是父類) E是子類
?只能是E類的父類
int … num 相當於傳入的參數是個數組
方法可以接收多個參數 int … num 只能是方法參數的最後一個
public static void fun(int a,int ... num) {
}
集合中的刪除
增強for循環一般只用來遍歷
1.不使用迭代器
2.使用迭代器
不使用迭代器遍歷
如果集合中有b 就把b刪除
ArrayList< String > list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("b")) {
// i-- 先參與運算 再自減
list.remove(i--);
}
}
System.out.println(list);
}
迭代器刪除
如果集合中有b 就把b刪除
ArrayList< String > list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
if (string.equals("b")) {
iterator.remove();
}
}
System.out.println(list);