Java集合總結

2021-07-16 09:59:56 字數 2278 閱讀 6570

集合和陣列在儲存資料的時候是各有優缺點的,先總結下集合和陣列的區別

1.陣列長度固定,集合長度不固定

2.陣列只能儲存同一型別的元素,集合可以儲存不同資料型別(在引入泛型後,可以規定元素的型別相同)

3.陣列可以儲存基本型別也可以儲存引用型別,集合只能儲存引用型別

集合類由兩大介面派生而出:collection和map

collection:是介面,需要由實現類去實現介面,儲存單列元素。

它的主要方法:

新增:boolean add(e e)  移除:boolean remove(object o)  判斷是否包含某元素:boolean contains(object o)  返回集合中元素的個數:int size()   判斷集合是否為空:boolean isempty()  迭代器:iteratoriterator()  是collection集合特有的一種遍歷方式,實現了iterable介面,使用boolean hasnext():

如果迭代器中還有元素,則返回true。

和e next():

返回迭代器中的下乙個元素  

這兩個方法進行遍歷 它的

子介面:list和set及queue。list集合中元素是有序不唯一的(有序是指儲存有序但不是排序),set集合中元素是無序但唯一的。

list集合的實現類:

arraylist:底層資料結構是陣列,查詢快,增刪慢;執行緒不安全,效率高;

vector:底層資料結構是陣列,查詢快,增刪慢;執行緒安全,效率低;

linkedlist:底層資料結構是聯邦,查詢慢,增刪快;執行緒不安全,效率低。

queue:底層資料結構是佇列,類似於list(queue接觸較少,後面不做總結)

set集合的實現類:

hashset:底層資料結構是雜湊表,依賴hashcode()方法和equals()方法。這兩個方法的執行順序:先hashcode(),值不同:新增;值相同:equals()值,不同:新增;相同:不新增。 其子類linkedhashset,底層資料結構由雜湊表及鍊錶構成,鍊錶保證元素有序,set保證元素唯一。

treeset:底層資料結構是紅黑樹,是一種自平衡的二叉樹。元素排序(是排序不是有序!)

排序分為自然排序和比較器排序。自然排序:元素具備比較性,元素所屬類實現介面comparable即可,比如我們平常使用的integer,string

都已實現comparable介面;比較器排序:如果元素是自定義類時,需要按需求對元素進行排序,比如按自定義類中的某個成員變數的大小進行排序,此時需要集合接收乙個comparator的實現類物件,可採用匿名內部類或外部類去重寫compare()方法。

map:是乙個介面,k是鍵 ,v是該鍵對應的值,儲存的元素是鍵值對,也就是成對存在的,儲存雙列元素。鍵不能重複,每乙個鍵最多對映乙個值。

它的主要方法:

新增:v put(k key,v value)   刪除:v remove(k key,v value)   判斷:1).boolean containskey(object o):是否包含某個鍵;2).boolean containsvalue(object o):是否包含某個值;3).boolean isempty():是否為空  獲取:1) setkeyset() 獲取所有鍵的檢視  2) v get(object key) 返回改建對應的值  3) int size() 獲得該集合的鍵值對的對數

map集合的遍歷方式:

1)鍵找值:將所有的鍵獲取到乙個集合set中,再遍歷該集合獲取對應的值

2)由鍵值對物件找鍵和值:獲取所有的鍵值對物件到集合中,再遍歷該集合獲得每乙個鍵值對的鍵和值

map常用的實現類與set的實現類類似:

hashtable:類似hashset,執行緒安全,效率低,被hashmap替代;

hashmap:類似hashset,執行緒不安全,效率高;

linkedhashmap:類似linkedhashset;

treemap:類似setmap

注意:map集合的資料結構僅對鍵有效,與值無關。

判斷使用哪個集合:

是否是鍵值對形式的元素?

是:map

是否需要排序?

是:treemap

否:hashmap

否:collection

是否唯一(或有序)

不唯一,有序:list

資料結構:陣列:arraylist(執行緒不安全,效率高);vector(執行緒安全,效率低)

鍊錶:linkedlist(執行緒不安全,效率高);

唯一,無序:set

是否排序?

是:treeset

否:hashset

JAVA 集合總結

如果涉及到堆疊,佇列等操作,應該考慮用list,對於需要快速插入,刪除元素,應該使用linkedlist,如果需要快速隨機訪問元素,應該使用arraylist。如果程式在單執行緒環境中,或者訪問僅僅在乙個執行緒中進行,考慮非同步的類,其效率較高,如果多個執行緒可能同時操作乙個類,應該使用同步的類。要...

java 集合總結

結構 collection list linkedlist arraylist vector stack set map hashtable hashmap weakhashmap 區別 類是否有序 是否執行緒安全 是否允許重複 是否允許空值 常用情景 描述總結 linkedlist有序否 是是對於...

java集合總結

set 其中的值不允許重複,無序的資料結構 list 其中的值允許重複,因為其為有序的資料結構 map 成對的資料結構,健值必須具有唯一性 鍵不能同,否則值替換 list按物件進入的順序儲存物件,不做排序或編輯操作。set對每個物件只接受一次,並使用自己內部的排序方法 通常,你只關心某個元素是否屬於...