list
和set
都是conllection
介面的子介面。
list
中的元素是有順序的,可以重複的。
set中的額元素是沒有順序的,不可以重複的.
set是通過hashcode
和equals
比較元素是否重複的。
先使用hashcode
方法判斷已經存在
hashset
中元素的
hashcode
值和將要加入元素
hashcode
值是否相同。如果不同,直接新增;如果相同,再呼叫
equals
方法判斷,如果返回
true
表示hashset
中已經新增該物件了,不需要再次新增(重複),如果返回
false
就表示不重複,可以直接加入
hashset中
list
:是儲存單列資料的集合,儲存的資料是有序並且是可以重複的
map:儲存雙列資料的集合,通過鍵值對儲存資料,儲存
的資料是無序的,
key值不能重複,
value
值可以重複
1 arraylist
底層使用陣列實現。
linkedlist
底層使用鍊錶實現。
2 對於隨機方法
get和
set arraylist
的優於linkedlist
,因為linkedlist
查詢時需要指標移動。
3 對應增刪改操作
linkedlist
優於arraylist
,因為arraylist
需要建立新陣列拷貝資料,元素數量越多效率差距越大。
1 arraylist
和vector
都是list
的實現類。
2 arraylist
和vector
底層都是陣列實現的。
區別 1 arraylist
的所有方法都不是執行緒安全的,
vector
的所有方法都是執行緒安全的。
2 arraylist
和vector
的空間增長方式不同,
arraylist
按照1.5
被擴容,
vector
當擴容容量大於
0時,新陣列的長度為原陣列的長度
+擴容容量。否則新陣列的長度為原陣列的兩倍。
核心區別:
1 hashmap
的方法不是同步的,
hashtable
的方法是同步的。
2 hashmap
允許value
為null
,允許有乙個
key為
null
。hashtable
不允許出現為
null
的key
和value
。 次要區別:
1 hashmap
和hashtable
繼承的父類不同。
2 兩個
api也略有不同,
3 hashtable
預設的初始大小為
11,之後每次擴充,容量變為原來的
2n+1
。hashmap
預設的初始化大小為
16。之後每次擴充,容量變為原來的2倍
1 hashmap
實現的是
map介面。
hashset
實現的是
set介面。
2 hahsmap
是以鍵值對的形式儲存資料,
hashset
只是儲存物件。
3 hashmap
使用鍵值對來計算
hashcode
,hashset
使用物件來計算
hashcode
1 hashmap
不是執行緒安全的,
concurrenthashmap
是執行緒安全的。
2 concurrenthashmap
對整個桶陣列進行了分段,而
hashmap
則沒有
原理:hashmap
是基於hashing
的原理,我們使用
put(key, value)
儲存物件到
hashmap
中,使用
get(key)
從hashmap
中獲取物件。當我們給
put()
方法傳遞鍵和值時,我們先對鍵呼叫
hashcode()
方法,返回的
hashcode
用於找到
bucket
位置來儲存
entry
物件。
java基礎之集合
1.collectiton 單列儲存集合 list 元素是有序的,元素可以重複。因為該集合體系有索引 arraylist 底層的資料結構使用的是陣列結構 特點 陣列元素查詢很快,但是增刪很慢,因為增刪乙個元素,陣列後面的其他元素都需要變動,執行緒不同步 linklist 底層的資料結構使用的是鍊錶資...
java基礎之集合
集合的型別與各自的特性 collection 單列集合 list 有儲存順序,可重複 arraylist 陣列實現,查詢快,增刪慢由於是陣列實現,在增和刪的時候會牽扯到陣列增容,以及拷貝元素,所以慢。陣列是可以直接按索引查詢,所以查詢時較快。linkedlist 鍊錶實現,增刪快,查詢慢由於鍊錶實現...
java基礎之集合
集合容器因為內部的資料結構不同,有多種具體容器。不斷的向上抽取,就形成了集合框架。框架的頂層collection介面 collection的常見方法 1.新增 boolean add object obj boolean addall collection coll 2.刪除 boolean rem...