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 類名<表明泛型的變量>{ }
使用格式:
一、定義類時肯定泛型的類型
二、始終不肯定泛型的類型,直到建立對象時,肯定泛型的類型
方法上:
修飾符<> 返回值類型 方法名(泛型變量 變量名){}
使用格式:
使用格式:調用方法時,肯定泛型的類型