Java——Set 集合

來源:互聯網
上載者:User

標籤:new   nbsp   迭代   clear   ado   查看   刪除   好的   重複元素   

  Set集合,它類似於一個罐子,程式可以依次把多個對象 “丟進” Set 集合,而 Set 集合通常不能記住元素的添加的順序,也就是說Set 集合是無序的。Set 集合與 Colleaction 基本相同,沒有提供額外的方法,實際上 Set 就是 Collection,只是行為略有不同(Set 不允許包含重複元素)。

》HashSet 

  HashSet 類是 Set 介面的典型實作類別,大多數時候使用 Set 集合時就是使用這個實作類別。HashSet 按 Hash 演算法來儲存集合中的元素,因此具有很好的存取和尋找效能。

  HashSet 具有以下特點:

  》不能保證元素的排列順序,順序可能和添加的順序不同,順序也有可能發生變化。

  》HashSetf不是同步的,如果多個線程同時來訪問一個 HashSet,假設有兩個或者兩個以上線程同時修改了HashSet 集合時,則必須通過代碼來保證其同步。

  》集合元素值可以是 null。

public static void main(String[] args) {                Dog ououDog=new Dog("歐歐","雪納瑞");        Dog yayaDog=new Dog("亞亞","拉布拉多");        Dog meimeiDog=new Dog("美美","雪納瑞");        Dog feifeiDog=new Dog("菲菲","拉布拉多");                Set dogs = new HashSet();        //添加元素        dogs.add(ououDog);          dogs.add(yayaDog);        dogs.add(meimeiDog);        dogs.add(feifeiDog);                   //遍曆集合中的元素        for (Object item : dogs) {            Dog dog=(Dog)item;            System.out.println(dog.getName());        }                System.out.println(dogs.size());    //查看長度                System.out.println(dogs.isEmpty());  //為空白返回 true ,否則返回 false                System.out.println(dogs.contains(feifeiDog));  //指定元素存在返回 true,否則返回false                dogs.remove(feifeiDog);  //刪除指定元素                dogs.clear();   //清空集合當中的所有元素            }

 

 》LinkedHashSet 

  HashSet 還有子類 LinkedHashSet, LinkedHashSet 集合也是根據元素的 hashCode 值來決定元素的儲存位置,但它同時使用鏈表維護元素的次序,這樣使得元素看起來是以插入的順序儲存的。也就是說,當遍曆 LinkedHashSet 將會按照添加元素順序來訪問集合裡的元素。

  LinkedHashSet 需要維護元素的插入順序,因此效能略低於 HashSet 的效能,但在迭代訪問 Set 裡的全部元素時將有很好的效能,因為它以鏈表來維護內部順序。雖然 LinkedHashSet 使用了鏈表記錄集合元素的添加順序,但 LinkedhasHSet依然是 HashSet,因此它依然不允許集合元素重複。

public static void main(String[] args) {                Dog ououDog=new Dog("歐歐","雪納瑞");        Dog yayaDog=new Dog("亞亞","拉布拉多");        Dog meimeiDog=new Dog("美美","雪納瑞");        Dog feifeiDog=new Dog("菲菲","拉布拉多");                Set dogs=new LinkedHashSet();                dogs.add(ououDog);          dogs.add(yayaDog);        dogs.add(meimeiDog);        dogs.add(feifeiDog);                           for (Object item : dogs) {            Dog dog=(Dog)item;            System.out.println(dog.getName());        }        }

 

 

》TreeSet 

  TreeSet 是 SortedSet 介面的實作類別,正如 SortedSet 名字所暗示的,TreeSet 可以確保集合元素處於排序狀態。與HashSet 相比,TreeSet 還提供了幾個額外的方法。

public static void main(String[] args) {                TreeSet nums=new TreeSet();            nums.add(5);        nums.add(2);        nums.add(10);        nums.add(-9);        nums.add(15);                //自動排序    從小到大        System.out.println(nums);   //輸出 [-9, 2, 5, 10, 15]                //輸出集合元素的一個元素        System.out.println(nums.first());    //輸出 -9                //輸出集合元素的最後一個元素        System.out.println(nums.last());     //輸出 15                //返回小於 4 的子集,不包含 4         System.out.println(nums.headSet(4)); //輸出[-9, 2]                //返回大於 5 的子集,子集中還包含5        System.out.println(nums.tailSet(5)); //輸出[5, 10, 15]                //返回大於等於-3 、小於4的子集        System.out.println(nums.subSet(-3, 4));  //輸出[2]                //返回小於指定元素 的最大元素,指定元素不需要非得是TreeSet集合裡的元素        System.out.println(nums.lower(11));                //返回大於指定元素的最小元素        System.out.println(nums.higher(3));                //如果 TreeSet 採用了定製排序,則該方法返回定製排序所使用的 Comparator;如果採用自然排序,則返回 null        System.out.println(nums.comparator());    }

 

 

 

》各 Set 實作類別的效能分析

  HashSet 和 TreeSet 是 Set 的兩個典型實現,到底如何選擇 HashSet 和 TreeSet 呢?HashSet 的效能總是比 TreeSet 好(特比是常用的添加 、查詢元素等操作),因為 TreeSet 需要額外的紅/黑樹狀結構演算法來維護集合元素的次序,只有當需要一個保持排序的 Set 時,才應該使用 TreeSet ,否則都應該使用 HashSet 。

  HashSet 還有一個子類 : LinkedHashSet ,對於普通的插入、刪除操作,LinkedHashSet 比 HashSet 要略微慢一點,這是由於維護鏈表所帶來的額外開銷造成的,但由於有了鏈表,遍曆 LinkedHashSet 會更塊。

 

Java——Set 集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.