5 03 集合框架 set集合

2022-03-28 01:57:50 字數 2905 閱讀 7233

一、set集合概述

乙個不包含重複元素的 collection。更確切地講,set 不包含滿足e1.equals(e2)的元素對e1e2,並且最多包含乙個 null 元素。正如其名稱所暗示的,此介面模仿了數學上的 set 抽象。

在所有構造方法以及 add、equals 和 hashcode 方法的協定上,set 介面還加入了其他規定,這些規定超出了從 collection 介面所繼承的內容。出於方便考慮,它還包括了其他繼承方法的宣告(這些宣告的規範已經專門針對 set 介面進行了修改,但是沒有包含任何其他的規定)。

對這些構造方法的其他規定是(不要奇怪),所有構造方法必須建立乙個不包含重複元素的 set(正如上面所定義的)。

注:如果將可變物件用作 set 元素,那麼必須極其小心。如果物件是 set 中某個元素,以一種影響 equals 比較的方式改變物件的值,那麼 set 的行為就是不確定的。此項禁止的乙個特殊情況是不允許某個 set 包含其自身作為元素。

某些 set 實現對其所包含的元素有所限制。例如,某些實現禁止 null 元素,而某些則對其元素的型別所有限制。試圖新增不合格的元素會丟擲未經檢查的異常,通常是 nullpointerexception 或 classcastexception。試圖查詢不合格的元素是否存在可能會丟擲異常,也可能簡單地返回 false;某些實現會採用前一種行為,而某些則採用後者。概括地說,試圖對不合格元素執行操作時,如果完成該操作後不會導致在 set 中插入不合格的元素,則該操作可能丟擲乙個異常,也可能成功,這取決於實現的選擇。此介面的規範中將這樣的異常標記為「可選」。

二、hashset儲存字串並遍歷

hashseths = new hashset<>(); //建立hashset物件

boolean b1 = hs.add("a");

boolean b2 = hs.add("a"); //當向set集合中儲存重複元素的時候返回為false

hs.add("b");

hs.add("c");

hs.add("d");

system.out.println(hs); //hashset的繼承體系中有重寫tostring方法

system.out.println(b1);

system.out.println(b2);

for (string string : hs)

}三、自定義物件保證元素的唯一性

/*** @param args

* set集合,無索引,不可以重複,無序(訪問不一致)

*/public static void main(string args)

重寫hashcode()equals方法      

/** 為什麼是31?

* 1,31是乙個質數,質數是能被1和自己本身整除的數

* 2,31這個數既不大也不小

* 3,31這個數好算,2的五次方-1,2向左移動5位

*/@override

public int hashcode()

@override

public boolean equals(object obj) else if (!name.equals(other.name)) //呼叫物件的姓名不等於傳入物件的姓名

return false; //返回false

return true; //返回true

}四、linkedhashset

a.概述   

具有可預知迭代順序的 set 介面的雜湊表和鏈結列表實現。此實現與 hashset 的不同之外在於,後者維護著乙個執行於所有條目的雙重鏈結列表。此鏈結列表定義了迭代順序,即按照將元素插入到 set 中的順序(插入順序)進行迭代。注意,插入順序不 受在 set 中重新插入的 元素的影響。(如果在 s.contains(e) 返回 true 後立即呼叫 s.add(e),則元素 e 會被重新插入到 set s 中。)

此實現可以讓客戶免遭未指定的、由hashset提供的通常雜亂無章的排序工作,而又不致引起與treeset關聯的成本增加。使用它可以生成乙個與原來順序相同的 set 副本,並且與原 set 的實現無關:

五、運用**

/*** @param args

* linkedhashset

* 底層是鍊錶實現的,是set集合中唯一乙個能保證怎麼存就怎麼取的集合物件

* 因為是hashset的子類,所以也是保證元素唯一的,與hashset的原理一樣

*/public static void main(string args)

六、treeset集合

a概述treeset集合是用來物件元素進行排序的,同樣他也可以保證元素的唯一

* 當compareto方法返回0的時候集合中只有乙個元素

* 當compareto方法返回正數的時候集合會怎麼存就怎麼取

* 當compareto方法返回負數的時候集合會倒序儲存

b**演示   

public static void main(string args)

public static void demo4()

public static void demo3()

public static void demo2()

public static void demo1()

class comparebylen /*extends object*/ implements comparator

}

集合4 集合 Collection介面 Set介面

儲存無序的 不可重複的資料 三種實現類 注 1.set介面中沒有額外定義新的方法,使用的都是collection中宣告過的方法 2.向set中新增的資料,其所在類一定要重寫hashcode 和equals 且重寫的hashcode 和equals 盡可能保持一致 相等的物件具有相等的雜湊碼 以has...

2018 3 28 集合框架

1.迭代器的作用 為集合而生,用來專門遍歷集合中的元素 2.collection介面中的iterator 方法返回乙個iterator 通過iterator介面的兩個方法即可方便實現遍歷 hasnext 判斷是否存在另乙個可訪問的元素 next 返回要訪問的下乙個元素 3.map類使用迭代器遍歷元素...

08 集合對映 set

實際上,set這種集合對映我們在前面已經學習關聯關係對映時已經用過了,實體類 實體類都在在資料庫中有對應的表 中有一對多或者多對多的關係,並且我們可以通過某一側訪問到另一側,就是通過在類中設定 set集合並配置set對映來實現的。在hibernate配置中有兩種資料型別,一種是值型別,另一種是實體型...