Java 中的set集合

2021-09-25 01:51:47 字數 2980 閱讀 5440

set集合類似於乙個罐子,程式可以依次把多個物件「丟進」set集合,而set集合通常不能記住元素的新增順序。 set集合不允許包含相同的元素,如果試圖把兩個相同的元素加入同乙個set集合中,則新增操作失敗,add()方法返回 false,且新元素不會被加入。

一:hashset類是set介面的典型實現類,大多數時候使用set集合時就是使用這個實 現類。 hashset類按hash演算法來儲存集合中的元素,因此具有很好的訪問和查詢效能。當向 hashset集合中存入乙個元素時, hashset會呼叫該物件的 hashcode()方法來得到該物件的hashcode值,然後根據該hashcode值決定該對 象在hashset中的儲存位置。如果有兩個元素通過 equals方法比較返回true,但它們的hashcode()方法返回值不相等, hashset將會把它們儲存在不同的位置, 依然可以新增成功。

hashset類具有以下特點:

1、不能保證元素的排列順序,順序可能與新增順序不同,順序也有可能發生變化。

2、hashset不是同步的(不是執行緒安全的),如果多個執行緒同時訪問乙個 hashset,假設有兩個或者兩個以上執行緒同時修改了 hashset集合時,則必須通過**來保證其同步。

3、集合元素值可以是null,但只能放入乙個null。

hashsetset =newhashset<>();

// 新增元素,新增成功時返回

true

,失敗時返回

false

set.add(

"a");

set.add(

"b");

set.add(

"c");

set.add(

"d");

set.add(

"a");

// 新增相同的元素時會新增失敗,返回

false

set.add(null);

// 可以放入

null

,但只能放入乙個

null

set.add(null);

// 新增相同的元素時會新增失敗,返回

false

system.

out.println("原

set集合:

"+ set);

輸出結果如下:

// 批量新增

set.addall(list);

system.

out.println(

"批量新增之後

"+ set);

// 移除元素

set.remove(

"d");

system.

out.println(

"移除元素

d之後:

"+ set);

// 批量移除

set.removeall(list);

system.

out.println(

"批量移除之後:

"+ set);

// 轉換成字串之後,輸出

set

system.

out.println(

"tostring

之後:"

+ set.tostring());

輸出結果如下:

二:hashset類還有乙個子類 linkedhashset, linkedhashset集合也是根據元素的 hashcode值來決定元素的儲存位置,但它同時使用鍊錶維護元素的次序,這樣使得元 素看起來是以插入的順序儲存的。也就是說,當遍歷 linkedhashset集合裡的元素 時, linkedhashset將會按元素的新增順序來訪問集合裡的元素。  linkedhashset需要維護元素的插入順序,因此效能略低於 hashset的效能,但 在迭代訪問set裡的全部元素時將有很好的效能,因為它以鍊錶來維護內部順序。

// linkedhashset

會保持元素的新增順序

linkedhashsetset =newlinkedhashset<>();

set.add(

"a");

set.add(

"b");

set.add(

"c");

set.add(null);

// 可以放入

null

,但只能放入乙個

null

system.

out.println(set);

輸出結果如下:

三:treeset是 sortedset介面的實現類,正如 sortedset名字所暗示的, treeset可 以確保集合元素處於排序狀態,treeset 不允許元素為null。

treesetset =newtreeset<>();

set.add(

"d");

set.add(

"a");

set.add(

"c");

set.add(

"b"); //

會自動排序

Java中set集合框架

set 元素不可以重複,是無序的 set介面中的方法和collection一致 hashset內部資料結構是雜湊表,是不同步的,無序,不重複 hashset hs new hashset hashset hs new linkedhashset 有序 hs.add new person value1...

Java集合中的集 Set

set也是乙個介面,他實現了collection和iterable兩個介面,因此,set是乙個集合,同時,我們也可以使用迭代器遍歷set。set是乙個介面,我們當然不能例項化介面,所以,我們一般實際使用的set有 hashset hashset儲存元素的策略,是使用一中稱為 雜湊表 的資料結構,因此...

Java集合 Set集合總結

特點 無序 不允許重複的 實現類 hashset 通過hash碼資料結構進行儲存的 無序 不重複 如果想要判斷兩個物件是否是同乙個物件 通常情況比較位址,但是現在需要通過制定內容來判斷是否相同 hashcode 判斷的其各個屬性的hashcode 而非物件真正的位址 結論 如果hashcode相同 ...