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相同 ...