最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的Set集合簡單匯總解析

 更新時(shí)間:2019年10月14日 10:01:31   作者:tunan96  
這篇文章主要介紹了Java中的Set集合簡單匯總解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Set接口簡介

Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進(jìn)行功能上的擴(kuò)充,它是比Collection接口更加嚴(yán)格了。與List接口不同的是,Set接口元素?zé)o序,并且都會以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。

Set接口主要有兩個(gè)實(shí)現(xiàn)類,分別是HashSet和TreeSet。其中,HashSet根據(jù)對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。TreeSet則是以二叉樹的方式來存儲元素,它可以實(shí)現(xiàn)對集合中的元素進(jìn)行排序

HashSet集合

HashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲的元素是不可重復(fù)的,并且元素都是無序的。當(dāng)向HashSet集合中添加一個(gè)對象時(shí),首先會調(diào)用該對象的hashCode()方法來計(jì)算對象的哈希值,從而確定元素的存儲位置。如果此哈希值相同,再調(diào)用對象的equals()方法來確保該位置沒有重復(fù)元素。Set集合與List集合存取元素的方式都一樣。

通過一個(gè)案例來演示HashSet集合的用法:

public class Example01 {
  public static void main(String[] args) {
    HashSet set = new HashSet();
    set.add("老大");
    set.add("老二");
    set.add("老三");
    set.add("老二");
    Iterator it = set.iterator();
    while(it.hasNext()) {
      Object obj = it.next();
      System.out.println(obj);
    }
  }
}

結(jié) 論:

當(dāng)向集合中存入元素時(shí),為了保證HashSet正常工作,要求在存入對象時(shí),重寫Object類中的hashCode和equals()方法。

上述案例將字符串存入HashSet時(shí),String類已經(jīng)重寫了hashCode()和equals()方法。但是如果將Student對象存入HashSet,結(jié)果又會怎樣呢?

class Student{
  String id;
  String name;
  public Student(String id, String name) {
    super();
    this.id = id;
    this.name = name;
  }
  @Override
  public String toString() {
    return id+":"+name;
  }
  @Override
  public int hashCode() {
    return id.hashCode();    //返回id屬性的哈希值
  }
  @Override
  public boolean equals(Object obj) {
    if(this == obj) {    //判斷是否是同一個(gè)對象
      return true;    //如果是,直接返回true
    }
    if(!(obj instanceof Student)) {    //判斷對象是為Student類型
      return false;    //如果對象不是Student類型返回false
    }
    Student stu = (Student) obj;    //將對象強(qiáng)轉(zhuǎn)為Student類型
    boolean b = this.id.equals(stu.id);    //判斷id值是否相同
    return b;  //返回判斷結(jié)果
  }
}
public class Example02 {
  public static void main(String[] args) {
    HashSet set = new HashSet();
    set.add(new Student("1", "老王"));
    set.add(new Student("2", "老三"));
    set.add(new Student("2", "老三"));
    System.out.println(set);
  }
}

Student類重寫了Object類的hashCode()和equals()方法。在hashCoded()方法中返回id屬性的哈希值,在equals()方法中比較對象的id屬性是否相等,并返回結(jié)果。當(dāng)調(diào)用HashSet集合的add()方法添加stu3對象時(shí),發(fā)現(xiàn)它的哈希值與stu2對象相同,而且stu2.equals(stu3)返回true。HashSet集合認(rèn)為兩個(gè)對象相同,因此重復(fù)的Student對象對成功去除了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java多線程中ReentrantLock與Condition詳解

    Java多線程中ReentrantLock與Condition詳解

    這篇文章主要介紹了Java多線程中ReentrantLock與Condition詳解,需要的朋友可以參考下
    2017-11-11
  • java swing實(shí)現(xiàn)QQ賬號密碼輸入框

    java swing實(shí)現(xiàn)QQ賬號密碼輸入框

    這篇文章主要為大家詳細(xì)介紹了Java swing實(shí)現(xiàn)QQ賬號密碼輸入框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • java中Class.forName方法的作用詳解

    java中Class.forName方法的作用詳解

    Class.forName(xxx.xx.xx) 返回的是一個(gè)類,但Class.forName方法的作用到底是什么終?下面這篇文章就來給大家詳細(xì)介紹了關(guān)于java中Class.forName方法的作用,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • 關(guān)于RestTemplate的使用深度解析

    關(guān)于RestTemplate的使用深度解析

    這篇文章主要介紹了對RestTemplate的深度解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java如何操作MongoDB常用API文檔

    Java如何操作MongoDB常用API文檔

    這篇文章主要介紹了Java如何操作MongoDB常用API文檔,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Spring中的IOC深度解讀

    Spring中的IOC深度解讀

    這篇文章主要介紹了Spring中的IOC深度解讀,spring容器會創(chuàng)建和組裝好清單中的對象,然后將這些對象存放在spring容器中,當(dāng)程序中需要使用的時(shí)候,可以到容器中查找獲取,然后直接使用,需要的朋友可以參考下
    2023-09-09
  • Java對數(shù)器驗(yàn)證算法詳解

    Java對數(shù)器驗(yàn)證算法詳解

    這篇文章主要介紹了Java對數(shù)器驗(yàn)證算法,Java對數(shù)函數(shù)的計(jì)算方法非常有問題,然而在API中卻有驚人的誤差。但是假如運(yùn)用了以下的方法,用Java處理數(shù)字所碰到的小麻煩就可以輕而易舉的解決了
    2023-04-04
  • Java 常量字符串過長的解決方法

    Java 常量字符串過長的解決方法

    這篇文章主要介紹了Java 常量字符串過長的解決方法,常量字符串過長會提示報(bào)錯(cuò),下面我們就一起來了解一下解決方法
    2021-04-04
  • 一文講透為什么遍歷LinkedList要用增強(qiáng)型for循環(huán)

    一文講透為什么遍歷LinkedList要用增強(qiáng)型for循環(huán)

    這篇文章主要為大家介紹了為什么遍歷LinkedList要用增強(qiáng)型for循環(huán)的透徹詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Springboot整合Mybatis和SQLite的詳細(xì)過程

    Springboot整合Mybatis和SQLite的詳細(xì)過程

    這篇文章主要介紹了Springboot整合Mybatis和SQLite的詳細(xì)過程,本文通過圖文示例相結(jié)合給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07

最新評論

江阴市| 印江| 彩票| 聊城市| 库尔勒市| 江阴市| 鹤峰县| 安康市| 芷江| 凤阳县| 云南省| 天水市| 东平县| 纳雍县| 志丹县| 丁青县| 普陀区| 北宁市| 阿拉善盟| 常宁市| 郯城县| 明溪县| 马尔康县| 孟连| 陇南市| 牙克石市| 浮山县| 久治县| 鄯善县| 余庆县| 砚山县| 德钦县| 保定市| 双桥区| 阳西县| 霞浦县| 临安市| 平罗县| 江源县| 凤庆县| 和田县|