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

Java如何使用Set接口存儲(chǔ)沒(méi)有重復(fù)元素的數(shù)組

 更新時(shí)間:2022年04月29日 15:03:04   作者:LNORA  
Set是一個(gè)繼承于Collection的接口,即Set也是集合中的一種。Set是沒(méi)有重復(fù)元素的集合,本篇我們就用它存儲(chǔ)一個(gè)沒(méi)有重復(fù)元素的數(shù)組

Set接口

        Set接口和List接口一樣,繼承Collection接口,Set接口中元素?zé)o序,并且都會(huì)以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。

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ǔ)位置。如果此時(shí)哈希值相同,再調(diào)用對(duì)象的equals()方法來(lái)確保該位置沒(méi)有重復(fù)元素。

 package 集合類(lèi);
 import java.util.HashSet;
 import java.util.Iterator;
 public class Set {
     public static void main(String[] args) {
         HashSet set=new HashSet();
         set.add("hello");
         set.add("world");
         set.add("abc");
         set.add("hello");
         Iterator it=set.iterator();
         while(it.hasNext()){
             Object obj=it.next();
             System.out.print(obj+ " ");
         }
     }
 }

運(yùn)行結(jié)果

         由運(yùn)行結(jié)果可以看出,取出元素的順序和添加元素的順序并不一致,并且重復(fù)的字符串被去掉了,只添加了一次,是因?yàn)镠ashSet集合的add()方法存入元素時(shí),首先調(diào)用當(dāng)前存入對(duì)象的hashCode()方法獲得對(duì)象的哈希值,然后根據(jù)哈希值算出一個(gè)存儲(chǔ)位置,如果這個(gè)位置上沒(méi)有元素,則直接將該元素存入,如果該位置上有元素存在,則會(huì)調(diào)用equal()方法讓當(dāng)前存入的元素依次和該位置上的元素比較。如果返回結(jié)果為false就將該元素存入集合,返回結(jié)果為true,則說(shuō)明有重復(fù)元素,將該元素舍棄。

 package 集合類(lèi);
 import java.util.HashSet;
 class Student{
     String id;
     String name;
     public Student(String id,String name){
         this.id=id;
         this.name=name;
     }
     public String toString(){
         String s = id + ":" + name;
         return s;
     }
 }
 public class Set1 {
     public static void main(String[] args) {
         HashSet hs=new HashSet();
         Student stu1=new Student("1","hello");
         Student stu2=new Student("2","world");
         Student stu3=new Student("1","hello");
         hs.add(stu1);
         hs.add(stu2);
         hs.add(stu3);
         System.out.println(hs);
     }
 }

運(yùn)行結(jié)果

  

     所沒(méi)有去掉重復(fù)的元素,是因?yàn)樵诙xStudent類(lèi)時(shí)沒(méi)有重寫(xiě)hashCode()和equals()方法。

package API;
 import java.util.HashSet;
 class Student{
     private String id;
     private String name;
     public Student(String id,String name){
         this.id=id;
         this.name=name;
     }
     //重寫(xiě)toString方法
     public String toString(){
         return id+ ":"+name;
     }
     //重寫(xiě)hashCode方法
     public int hashCode(){
         //返回id屬性的哈希值
         return id.hashCode();
     }
     public boolean equals(Object obj){
         //判斷是否是同一個(gè)對(duì)象
         if(this==obj){
             return true;
         }
         //判斷對(duì)象是Student類(lèi)型
         if(!(obj instanceof Student)){
             return false;
         }
         //將對(duì)象強(qiáng)轉(zhuǎn)為Student類(lèi)型
         Student stu=(Student)  obj;
         //判斷id是否相同
         boolean b=this.id.equals(stu.id);
         return b;
     }
 }
 public class Set2 {
     public static void main(String[] args) {
         HashSet hs=new HashSet();
         Student stu1=new Student("1","hello");
         Student stu2=new Student("2","world");
         Student stu3=new Student("1","hello");
         hs.add(stu1);
         hs.add(stu2);
         hs.add(stu3);
         System.out.println(hs);
     }
 }

運(yùn)行結(jié)果

         由于Student類(lèi)重寫(xiě)了Object類(lèi)的hashCode()和equals()方法。在hashCode()方法中返回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ì)象被去除了。

到此這篇關(guān)于Java如何使用Set接口存儲(chǔ)沒(méi)有重復(fù)元素的數(shù)組的文章就介紹到這了,更多相關(guān)Java Set接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 新手初學(xué)Java-Map

    新手初學(xué)Java-Map

    Map簡(jiǎn)介:將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。此接口取代 Dictionary 類(lèi),后者完全是一個(gè)抽象類(lèi),而不是一個(gè)接口
    2021-07-07
  • Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • SpringSecurity中@PermitAll與@PreAuthorize的實(shí)現(xiàn)

    SpringSecurity中@PermitAll與@PreAuthorize的實(shí)現(xiàn)

    @PermitAll和@PreAuthorize都是處理安全性的強(qiáng)大工具,本文主要介紹了SpringSecurity中@PermitAll與@PreAuthorize的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(xún)(實(shí)例講解)

    使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(xún)(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(xún)(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 詳解Java時(shí)區(qū)處理之Date,Calendar,TimeZone,SimpleDateFormat

    詳解Java時(shí)區(qū)處理之Date,Calendar,TimeZone,SimpleDateFormat

    這篇文章主要介紹了Java時(shí)區(qū)處理之Date,Calendar,TimeZone,SimpleDateFormat的區(qū)別于用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • windows定時(shí)器配置執(zhí)行java jar文件的方法詳解

    windows定時(shí)器配置執(zhí)行java jar文件的方法詳解

    這篇文章主要給大家介紹了關(guān)于windows定時(shí)器配置執(zhí)行java jar文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot中讀取jar包中的resources目錄下的文件的三種方式

    SpringBoot中讀取jar包中的resources目錄下的文件的三種方式

    這篇文章給大家總結(jié)了SpringBoot讀取 jar 包中的 resources 目錄下的文件的三種方式,文中有詳細(xì)的代碼示例供大家參考,,需要的朋友可以參考下
    2023-06-06
  • 基于SpringBoot服務(wù)端表單數(shù)據(jù)校驗(yàn)的實(shí)現(xiàn)方式

    基于SpringBoot服務(wù)端表單數(shù)據(jù)校驗(yàn)的實(shí)現(xiàn)方式

    這篇文章主要介紹了基于SpringBoot服務(wù)端表單數(shù)據(jù)校驗(yàn)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Java簡(jiǎn)單工廠模式定義與用法實(shí)例分析

    Java簡(jiǎn)單工廠模式定義與用法實(shí)例分析

    這篇文章主要介紹了Java簡(jiǎn)單工廠模式定義與用法,結(jié)合實(shí)例形式分析了java簡(jiǎn)單工廠模式的相關(guān)定義與使用技巧,并給出了原理類(lèi)圖進(jìn)行總結(jié),需要的朋友可以參考下
    2019-07-07
  • java設(shè)計(jì)模式之實(shí)現(xiàn)對(duì)象池模式示例分享

    java設(shè)計(jì)模式之實(shí)現(xiàn)對(duì)象池模式示例分享

    對(duì)象池模式經(jīng)常用在頻繁創(chuàng)建、銷(xiāo)毀對(duì)象(并且對(duì)象創(chuàng)建、銷(xiāo)毀開(kāi)銷(xiāo)很大)的場(chǎng)景,比如數(shù)據(jù)庫(kù)連接池、線(xiàn)程池、任務(wù)隊(duì)列池等。本代碼簡(jiǎn)單,沒(méi)有限制對(duì)象池大小
    2014-02-02

最新評(píng)論

涿鹿县| 大名县| 城固县| 兰考县| 米泉市| 潞城市| 沂源县| 大竹县| 罗甸县| 城固县| 常宁市| 汕尾市| 新丰县| 临安市| 肥东县| 德惠市| 东城区| 陇川县| 南宁市| 秭归县| 龙里县| 定南县| 淮安市| 漾濞| 大关县| 措美县| 邓州市| 沈阳市| 马尔康县| 时尚| 吉安市| 安西县| 东平县| 都江堰市| 南安市| 新宾| 大竹县| 民丰县| 陆河县| 宣威市| 昌都县|