欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Set集合簡(jiǎn)單匯總解析

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

Set接口簡(jiǎn)介

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

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

HashSet集合

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

通過(guò)一個(gè)案例來(lái)演示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正常工作,要求在存入對(duì)象時(shí),重寫(xiě)Object類(lèi)中的hashCode和equals()方法。

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

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è)對(duì)象
      return true;    //如果是,直接返回true
    }
    if(!(obj instanceof Student)) {    //判斷對(duì)象是為Student類(lèi)型
      return false;    //如果對(duì)象不是Student類(lèi)型返回false
    }
    Student stu = (Student) obj;    //將對(duì)象強(qiáng)轉(zhuǎn)為Student類(lèi)型
    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類(lèi)重寫(xiě)了Object類(lèi)的hashCode()和equals()方法。在hashCoded()方法中返回id屬性的哈希值,在equals()方法中比較對(duì)象的id屬性是否相等,并返回結(jié)果。當(dāng)調(diào)用HashSet集合的add()方法添加stu3對(duì)象時(shí),發(fā)現(xiàn)它的哈希值與stu2對(duì)象相同,而且stu2.equals(stu3)返回true。HashSet集合認(rèn)為兩個(gè)對(duì)象相同,因此重復(fù)的Student對(duì)象對(duì)成功去除了。

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

相關(guān)文章

  • Springboot文件上傳功能簡(jiǎn)單測(cè)試

    Springboot文件上傳功能簡(jiǎn)單測(cè)試

    這篇文章主要介紹了Springboot文件上傳功能簡(jiǎn)單測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • springcloud之Feign、ribbon如何設(shè)置超時(shí)時(shí)間和重試機(jī)制

    springcloud之Feign、ribbon如何設(shè)置超時(shí)時(shí)間和重試機(jī)制

    這篇文章主要介紹了springcloud之Feign、ribbon如何設(shè)置超時(shí)時(shí)間和重試機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java 使用Docker時(shí)經(jīng)常遇到的五個(gè)問(wèn)題

    Java 使用Docker時(shí)經(jīng)常遇到的五個(gè)問(wèn)題

    這篇文章主要介紹了Java 使用Docker時(shí)經(jīng)常遇到的五個(gè)問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼

    Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼

    Java是一種流行的編程語(yǔ)言,驗(yàn)證碼是一種常用的網(wǎng)絡(luò)安全技術(shù)。Java發(fā)展至今,網(wǎng)上也出現(xiàn)了各種各樣的驗(yàn)證碼,下面是用Java實(shí)現(xiàn)短信驗(yàn)證碼的總結(jié),感興趣的可以了解一下
    2023-03-03
  • Maven 命令行打包 和 pom.xml的常用配置詳解

    Maven 命令行打包 和 pom.xml的常用配置詳解

    這篇文章主要介紹了Maven 命令行打包 和 pom.xml的常用配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 基于springmvc之常用注解,操作傳入?yún)?shù)

    基于springmvc之常用注解,操作傳入?yún)?shù)

    這篇文章主要介紹了springmvc之常用注解,操作傳入?yún)?shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot2.0如何啟用https協(xié)議

    SpringBoot2.0如何啟用https協(xié)議

    這篇文章主要介紹了SpringBoot2.0如何啟用https協(xié)議,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Java上傳文件FTP服務(wù)器代碼實(shí)例

    Java上傳文件FTP服務(wù)器代碼實(shí)例

    這篇文章主要介紹了Java上傳文件FTP服務(wù)器代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • idea搭建SSM框架遇踩的坑(附完整過(guò)程)

    idea搭建SSM框架遇踩的坑(附完整過(guò)程)

    最近準(zhǔn)備搭建一個(gè)SSM框架,由于很久沒(méi)有搭建了,一來(lái)就遇到各種問(wèn)題,折騰了一天終于搞定了,特此記錄一下遇到的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于idea搭建SSM框架遇踩的坑,文中還附完整過(guò)程,需要的朋友可以參考下
    2023-04-04
  • Java線程間協(xié)作wait、notify和notifyAll詳解

    Java線程間協(xié)作wait、notify和notifyAll詳解

    這篇文章主要介紹了Java線程間協(xié)作wait、notify和notifyAll詳解,在 Java 中可以用 wait、notify 和 notifyAll 來(lái)實(shí)現(xiàn)線程間的通信,盡管關(guān)于wait和notify的概念很基礎(chǔ),它們也都是Object類(lèi)的函數(shù),但用它們來(lái)寫(xiě)代碼卻并不簡(jiǎn)單,,需要的朋友可以參考下
    2023-10-10

最新評(píng)論