Collection體系(集合類,它是一個介面): 兩個子類: List、Set(這兩個子類也是介面) List有兩個常用子類:(值,不唯一,允許有重覆的元素,都是有序的) ArrayList: 數組結構,查找快,增刪慢。線程不安全。 LinkedList: 有序,鏈表結構,查找慢,增刪快。線程不安 ...
Collection體系(集合類,它是一個介面): 兩個子類: List、Set(這兩個子類也是介面) List有兩個常用子類:(值,不唯一,允許有重覆的元素,都是有序的) ArrayList: 數組結構,查找快,增刪慢。線程不安全。 LinkedList: 有序,鏈表結構,查找慢,增刪快。線程不安全。 Vector:(以過時) 有序,數組結構,查找增刪都慢。線程安全。 Set:有三個常用子類(值,唯一,不允許有重覆的元素) HashSet: 底層是哈希表結構,無序。 如何保證唯一性的? 由HashCode和equals方法保證唯一性的。 順序: 先判斷HashCode方法 相同:判斷equals方法,相同:不添加。不相同:添加 不相同:添加 LinkedHashSet: 有序,底層是鏈表加哈希表結構,由鏈表保證有序,哈希表保證唯一。 TreeSet: 底層是二叉樹結構,有一定的自然排序演算法。 是如何保證元素的唯一性的? 根據返回值是否是0判斷是否重覆。並且還要保證元素有序: 根據返回值是正數還是負數。 實現方案:添加比較器 元素具備比較器:實現Comparable介面,重寫CompareTo方法。 集合具備比較器:實現Comparator介面,重寫Compare方法。 List和Set集合遍歷的幾種方式: Set集合是沒有普通for的遍歷方式 普通for、增強for、迭代器 普通for格式: for(int i = 0; i < list.size(); i++){} 增強for格式: for(類型 變數名 : 集合名){} 迭代器格式:(提供了兩個方法:hasNext和next方法) Iterator<類型> it = 集合名.iterator(); 什麼時候使用? 需要操作集合的角標的時候使用普通for 只需要遍歷集合的時候使用增強for或迭代器。 泛型: 泛型的通配符為:? <? extends T> 向下限制,只可以傳遞T類型或T類型的子類 <? super T> 向上限制,只可以傳遞T類型或T類型的父類 泛型的定義:定義泛型可以在類中預支地使用未知的類型。可定義在類、方法或介面上。 泛型的使用:一般在創建對象時,將未知的類型確定具體的類型。當沒有指定泛型時,預設類型為Object類型。 泛型的好處: 將運行時期的ClassCastException,轉移到了編譯時期變成了編譯失敗。 避免了類型強轉的麻煩。 泛型的格式: 類上: 修飾符 class 類名<代表泛型的變數> { } 使用格式: 使用格式:創建對象時,確定泛型的類型 介面上: interface 類名<代表泛型的變數>{ } 使用格式: 1、定義類時確定泛型的類型 2、始終不確定泛型的類型,直到創建對象時,確定泛型的類型 方法上: 修飾符<> 返回值類型 方法名(泛型變數 變數名){} 使用格式: 使用格式:調用方法時,確定泛型的類型