java基礎33 Set集合下的HashSet集合和TreeSet集合

來源:互聯網
上載者:User

標籤:eset   iterator   比較   err   tor   color   ===   假設   體系   

集合的體系:

---------| collection  單例集合的根介面
--------------| List  如果實現了list介面的集合類,具備的特點:有序,可重複       註:集合中的有序不是指自然順序,而是指添加進去的順序與出來的順序是一致的
------------------| ArrayList  ArrayList底層維護了一個object數組的實現的。(線程不安全),特點:查詢速度快,增刪速度慢。有序,可重複
------------------| LinkedList  LinkedList底層是使用鏈表結構實現的,特點:查詢速度慢,增刪速度快。有序,可重複
------------------| Vector(瞭解即可)  底層也是維護一個Object數組的實現的,實現與ArrayList是一樣的,但是Vector是安全執行緒的,操作效率低
--------------| Set  如果實現了set介面的集合類,具備的特點:無序,不可重複     註:集合中的無序不是指自然順序,而是指添加元素進去的順序與元素出來的順序是不一致的
------------------| HashSet  Set介面的實現,特點:沒有特定的順序,不允許有重複的元素。
------------------| TreeSet   Set介面的實現,特點:沒有特定的順序,不允許有重複的元素。

1、HashSet 集合

    HashSet集合是Set介面(集合)的一個實現;集合中的元素:無序,且不可重複性

1.1、HashSet 集合常用方法

    add(Object):將指定的元素添加到集合中
    remove(object):從HashSet集合中移除指定的元素
    size():返回當前集合中元素的個數
    iterator():返回此集合中的元素的迭代器
    toArray():返回一個包含此集合中所有元素的數組    相當於把集合轉換成數組的形式
    contain(object):判斷某元素是否在HashSet集合中(內含項目關聯性)

其實這幾個集合的常用方法幾乎一樣,比如 collection集合的一些常用方法

1.2、HashSet 集合不能添加重複元素的原理

    當調用add(Object)方法添加元素的時,首先會調用Object的hashCode方法判雜湊碼是否已經存在,如不存在則直接插入元素;如果已存在,則再去調用Object對象的equals()方法,判斷是否返回true,如果為true則說明元素已經存在,就不能再往HashSet集合中添加元素了;如為返回false,則說明元素不存在,可以繼續往HashSet集合中插入元素。

1.3、執行個體
 1 package com.dhb.collection; 2  3 import java.util.HashSet; 4  5 /** 6  * @author DSHORE / 2018-5-21 7  * 8  */ 9 /* HashSet的實現原理:往HasSet添加元素的時候,會先調用hashCode方法得到元素的咍希值,然後通過元素的雜湊值經過移運算,就可以算出該元素儲存在咍希表的儲存位置。10  *  1、如果算出該元素雜湊碼值的儲存位置處還沒有任何的元素,那麼該元素可以直接儲存到該位置上11  *  2、如果算出該元素雜湊碼值的儲存位置處已經有元素了,那麼就會調用該元素的equals方法與該位置的元素做一次比較,如果equals傳回值是true,那麼該元素與這個位置已經存在的元素就被視為重複元素,不允許再添加了;如果equals返回的是false,那麼該元素還可以添加進集合裡。12  * */13 class Personer{14     int id;15     String name;16     17     public Personer(int id,String name) {18         this.id=id;19         this.name=name;20     }21     @Override22     public String toString() {//重寫toString()的作用:讓傳回值以字串的形式輸出;若不重寫,傳回值則是記憶體位址23         return "Person [id=" + id + ", name=" + name + "]";24     }25     @Override26     public int hashCode() {//重寫hashCode()的作用:只通過id來作判斷27         System.out.println("========HashCode========");//輸出了5遍   原因:只要add()多少次,hashCode()就運行多少遍。28         return id;29     }30     @Override31     public boolean equals(Object obj) {//重寫equals()的作用:用id來判斷是否是同一個元素32         System.out.println("======這是equals方法========");//輸出了一遍  原因:只需要進行判斷的元素,equals()才運行。 如:只有狗娃處,才需要判斷(因為只與id有關)33         Personer p=(Personer)obj;34         return this.id==p.id;35     }36 }37 public class Demo11 {38     39     public static void main(String[] args) {40         HashSet<Personer> set=new HashSet<Personer>();//<Personer>:表示泛型41         set.add(new Personer(110,"狗娃"));42         set.add(new Personer(120,"狗剩"));43         set.add(new Personer(119,"狗蛋"));44         set.add(new Personer(1000,"狗蛋"));45         46         //假設只要編號一致,就是同一個人47         System.out.println("添加元素成功了嗎? "+set.add(new Personer(110, "狗娃")));//傳回值:false   如果不重寫equals()方法,那麼傳回值為true。原因在代碼最上面48         System.out.println(set);//傳回值:[Person [id=119, name=狗蛋], Person [id=110, name=狗娃], Person [id=10000, name=狗蛋], Person [id=120, name=狗剩]]49     }50 }

例2

 1 package com.dhb.collection; 2  3 /** 4  * @author DSHORE / 2018-5-21 5  * 6  */ 7 public class Demo13 { 8     public static void main(String[] args) { 9         String str1="hello";10         String str2=new String("hello");11         System.out.println("兩個是同一個對象?"+(str1==str2));//傳回值:false12         System.out.println("str1的hasCode:"+str1.hashCode());//傳回值:9916232213         System.out.println("str2的hasCode:"+str2.hashCode());//傳回值:9916232214         /*15          * HashCode預設情況下表示的記憶體位址,String類已經重寫了Object的hasCode方法16          * 注意:如果兩個字串的內容一致,那麼返回的hashCode碼也會一致17          * */18     }19 }
 2、TreeSet 集合

    TreeSet集合也是Set介面(集合)的一個實現;集合中的元素:無序,且不可重複性

 2.1、

 

 

 

 

 

原創DSHORE

作者首頁:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/9068474.html

歡迎轉載,轉載務必說明出處。(如果本文對您有協助,可以點擊一下右下角的 推薦,或評論,謝謝!

java基礎33 Set集合下的HashSet集合和TreeSet集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.