java集合基礎知識

集合

集合總圖

3個技術點

泛型:

定義:泛型,即「參數化類型」。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。那麼參數化類型怎麼理解呢?顧名思義,就是將類型由原來的具體的類型參數化,類似於方法中的變量參數,此時類型也定義成參數形式(可以稱之爲類型形參),然後在使用/調用時傳入具體的類型(類型實參)。

舉例: List list = new ArrayList();

T就是泛型,指list只能存儲T類型的數據。

比較器:

Comparable(可比、堪比、可比較的)接口 ,
接口中只有一個方法 int compareTo(Object o)
只要我們某個類實現了該方法,我們自定義類的對象就具備了比較的功能。就可以使用Arrays.sort(Object[] os)進行排序了。
返回值是一個大於0 或者小於0 或者等於0 的值,,
sort 方法會根據返回值 的符號位 進行是否交換位置的判斷

所有可以進行排序的對象,必須實現Comparable接口。並按照某種規則(實現compareTo 方法) 實現排序。

侷限性:只能按照某一種指定的規則進行排序。

內部比較器:要比較的類只要實現了comparable接口,就可以調用Arrays.sort();方法進行排序了。可以重寫compareTo方法,自定義排序方法。
外部比較器:新建一個類實現comparator接口,在裏面定義比較方法。就可調用此方法進行排序。

迭代器:

使用iterator()要求容器返回一個Iterator, Iterator將準備好返回序列的第一個元素;

使用next()獲得序列中的下一個元素;

使用hasNext()檢查序列中是否還有元素;

使用remove()將迭代器返回的元素刪除.

舉例: List l = new ArrayList();

for(iterator it = l.iterator();it.hasNext;){

System.out.println(it.next);

}

6個接口

Collection:

存儲元素特點:無序、可重複。

常見方法:

刪除:retainAll(Collection) removeAll(Collection) remove(Obj) clear() remove(index)

查看:isEmpty() contains(Obj) size() containsAll(Collection) indexOf(Obj) lastIndexOf(Obj)
get(index)

添加:add(Obj) addAll(Collection) add(index,Obj) addAll(index,Collection)

修改:set(index,Obj) trimToSize()

迭代:foreach for iterator (listiterator)

List:

存儲元素特點:有序 可重複

常見方法:

刪除:retainAll(Collection) removeAll(Collection) remove(Obj) clear() remove(index)

查看:isEmpty() contains(Obj) size() containsAll(Collection) indexOf(Obj) lastIndexOf(Obj)
get(index)

添加:add(Obj) addAll(Collection) add(index,Obj) addAll(index,Collection)

修改:set(index,Obj) trimToSize()

迭代:foreach for iterator (listiterator)

Set:

存儲元素特點:無序 唯一的

常見方法:

刪除:retainAll(Collection) removeAll(Collection) remove(Obj) clear() remove(index)

查看:isEmpty() contains(Obj) size() containsAll(Collection) indexOf(Obj) lastIndexOf(Obj)
get(index)

添加:add(Obj) addAll(Collection) add(index,Obj) addAll(index,Collection)

修改:set(index,Obj) trimToSize()

迭代:foreach iterator

Map:

存儲元素特點:鍵值對(鍵:key 相當於Set,唯一的 值:value 相當於Collection 可重複)

常見方法:

添加:put(k,v)

刪除:remove(k)

entrySet() value() ketSet() get(key)

迭代:

keySet()->[foreach/iterator]——>get(key)

entrySet()->[foreach/iterator]->getKey()/getValue()

iterator:實現了該接口的 可以作爲foreach語句的目標

Listiterator:迭代器 List迭代器 正向/逆向迭代 併發操作

9個常用類

ArrayList:

底層實現方式:數組

優點:隨機【根據索引】獲取效率高

缺點:刪除、添加效率低

LinkedList:

優點:底層數據結構是鏈表,查詢慢,增刪快

缺點:線程不安全,效率高

Vector:

優點:底層數據結構是數組,查詢快,線程安全

缺點:增刪慢;效率低,幾乎已經淘汰了這個集合

HashSet:

優點:其底層其實是一個數組,存在的意義是加快查詢速度

缺點:不能保證元素的順序;不可重複;不是線程安全的;集合元素可以爲 NULL

LinkedHashSet:

優點:不可以重複,有序,因爲底層採用 鏈表 和 哈希表的算法。鏈表保證元素的添加順序,哈希表保證元素的唯一性

缺點:底層採用了 哈希表算法以及 鏈表算法,既保證了元素的添加順序,也保證了查詢效率。但是整體性能要低於 HashSet

TreeSet:

優點:有序;不可重複,底層使用 紅黑樹算法,擅長於範圍查詢

缺點:不保證元素的添加順序

TreeMap:

優點:Iterator遍歷是排序的

缺點:插入、刪除消耗性能,效率低

Arrays:

集合的工具類,可以更方便的使用集合。

常用方法:

asList方法:使用該方法可以返回一個固定大小的List

binarySearch方法:支持在整個數組中查找,以及在某個區間範圍內查找

copyOf及copyOfRange方法:可以方便複製數組集合。

sort方法:可以方便排序。

toString方法:可以方便我們打印出數組內容。

Collections:

Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。