java的集合類(備忘)
一、集合類
1、集合其實就是存放物件的容器,專業點說就是集合是用了儲存和管理其它物件的物件,即物件的容器。集合可以擴容,長度可變,可以儲存多種型別的資料,而陣列長度不可變,只能儲存單一型別的元素。
2、用圖來總結哈集合的總況
map
Collection
下面是網上找到的圖:
(注:上述類圖中,實線邊框的是實現類,比如ArrayList,LinkedList,HashMap等,折線邊框的是抽象類,如AbstractList,AbstractMap等,而點線邊框的是介面,比如Collection,Iterator,List等)
集合中的結構和幾個實現類:
有序否 |
是否允許元素重複 |
||
Collection |
否 |
是 |
|
List |
是 |
是 |
|
Set |
AbstractSet |
否 |
否 |
HashSet |
否 |
||
TreeSet |
是(用二叉樹排序) |
||
Map |
AbstractMap |
否 |
使用key-value來對映和儲存資料,key必須唯一,value可以重複。 |
HashMap |
否 |
||
TreeMap |
是(用二叉樹排序) |
總述:List、Set、Map是這個集合體系中最主要的三個介面。
其中List/Set繼承至Collection介面。Set不允許元素重複,HashSet和TreeSet是兩個主要的實現類;List有序且允許元素重複,ArrayList、LinkedList和Vector是三個主要的實現 。
Map也屬於集合系統,但是和Collection介面不同,Map是key對value的對映集合,其中key列就是一個集合。Key是不能重複的,但是value是可以重複的,HashMap、TreeMap和Hashtable是三個主要的實現類。
SortedSet和SortedMap介面對元素按指定規則排序,SortedMap是對key列進行排序。
1、Collection介面:
Collection介面是最基本的集合介面,一個Collection代表一組Object的集合,這些Object被稱作為Collection的元素。所有實現Collection介面的類都必須提供兩個標準的建構函式:無引數的建構函式用於建立一個空的Collection,有一個Collection引數的建構函式用於建立一個新的Collection,這個新的Collection與傳入的Collection有相同的元素,後一個建構函式允許使用者複製一個Collection。
如何遍歷Collection中的每一個元素?不論Collection的實際型別如何,它都支援一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素,典型的用法如下:
這個對於繼承或者實現了Collection介面的類都適用。
操作:
單元素新增、刪除操作 |
boolean add(Object obj):將物件新增給集合 |
boolean remove(Object obj):如果集合中有與obj相匹配的物件,則刪除該物件obj。 |
|
查詢操作 |
int size():返回當前集合中元素的數量(長度) |
boolean isEmpty():判斷集合中是否有任何元素(是否為空) |
|
boolean contains(Object obj):查詢集合中是否含有物件obj |
|
Iterator iterator();返回一個迭代器(Iterator型別),用來訪問集合中的各個元素 |
|
組操作:作用於元素組或整個集合 |
boolean containsAll(Collection coll):查詢集合中是否含有集合coll中所有元素 |
boolean addAll(Collection coll):將集合c中所有元素新增給該集合(批量新增集合) |
|
void clear():刪除集合中所有元素 |
|
void removeAll(Collection coll):從集合中刪除集合coll中的所有元素 |
|
Void retainAll(Collection coll):從集合中刪除集合coll中不包含的元素(也就是說只保留集合coll中的元素) |
|
Collection轉換為Object陣列 |
Object[] toArray():返回一個內含集合所有元素的array(陣列) |
Object[] toArray(Object[]a):返回一個內含集合所有元素的array。執行期返回的array和引數a的型別相同,需要轉換為正確型別。 |
1、List介面:它對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList
ArrayList |
它是一種類似陣列的形式進行儲存,因此它的隨機訪問速度極快 |
LinkedList |
它的內部實現是連結串列,它適合於在連結串列中間需要頻繁插入和刪除操作 |
Iterator |
只能對容器進行向前遍歷 |
ListIterator |
繼承了Iterator的思想,並提供了對List進行雙向遍歷的方法。 |
2、Set介面:它也是Collection的一種擴充套件,但又與List不同,在它中的物件元素不允許重複。它常用的具體實現有HashSet和TreeSet類。
HashSet |
HashSet能快速定位一個元素,但是你方法哦HashSet中的物件需要實現hashCode()方法,它使用了前面說過的雜湊碼的演算法。 |
TreeSet |
TreeSet則將放入其中的元素按序存放,這就要求你放入其中的物件是可排序的, |
3、Comparable介面和Comparator介面
在“集合框架”中有兩種比較介面:Comparable介面和Comparator介面。像String和Integer等實現Comparable介面以提供一定排序方式,但這樣只能實現該介面一次,對於那些沒有實現Comparable介面的類、或者自定義的類,您可以通過Comparator介面來定義您自己的比較方式。
Comparable |
在java.lang包中,Comparable介面適用於一個類有自然順序的時候,假定物件集合是同一個型別,該介面允許您把集合排序成自然順序。 |
Comparator |
若一個類不能用於實現java.lang.Comparable,或者您不喜歡預設的Comparable行為並想提供自己的排序順序(可能多種排序順序方式),你可以實現Comparator介面,從而定義一個比較器。 |
二、LinkedHashMap與HashMap
1、LinkedHashMap和HashMap都是java.util.Map的實現類。其中LinkedHashMap是HashMap的一個子類。
2、
HashMap |
具有很快的訪問速度; |
遍歷時,取得資料的順序是完全隨機的; |
|
最多隻允許一條記錄的鍵位null;允許多條記錄的值為null |
|
不支援執行緒的同步,即任一時刻可以有多個執行緒同時寫HashMap,可能會導致資料的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。 |
|
它的遍歷速度與它的容量有關 |
|
LinkedHashMap |
遍歷時,取得的資料與存入的時候的順序一致 |
遍歷的時候,一般情況比HashMap慢,但是它的遍歷速度只是和實際資料有關,與容量無關。 |
三、List與ArrayList
1.List是一個介面,而ArrayList是一個類。且ArrayList繼承並實現了List類
2.List list=new ArrayList();這句建立了一個ArrayList的物件後把上溯到了List,也就是說list只能使用List的所有物件屬性和方法;如果它們的屬性和方法都相同的話,則屬性呼叫的是List中的,方法是呼叫的ArrayList中的;
ArrayList alist=new ArrayList();這句建立了ArrayList的物件,也就是說alist可以使用ArrayList中的特有的方法;
但是在平常使用中的時候,提倡用第一種,因為List有多個實現類。