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

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

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

Set接口

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

HashSet集合

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

 package 集合類;
 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+ " ");
         }
     }
 }

運行結(jié)果

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

 package 集合類;
 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);
     }
 }

運行結(jié)果

  

     所沒有去掉重復(fù)的元素,是因為在定義Student類時沒有重寫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;
     }
     //重寫toString方法
     public String toString(){
         return id+ ":"+name;
     }
     //重寫hashCode方法
     public int hashCode(){
         //返回id屬性的哈希值
         return id.hashCode();
     }
     public boolean equals(Object obj){
         //判斷是否是同一個對象
         if(this==obj){
             return true;
         }
         //判斷對象是Student類型
         if(!(obj instanceof Student)){
             return false;
         }
         //將對象強(qiáng)轉(zhuǎn)為Student類型
         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);
     }
 }

運行結(jié)果

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

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

相關(guān)文章

  • Java實現(xiàn)擲骰子控制臺和窗體兩種方法

    Java實現(xiàn)擲骰子控制臺和窗體兩種方法

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)擲骰子控制臺和窗體兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot中shiro過濾器的重寫與配置詳解

    SpringBoot中shiro過濾器的重寫與配置詳解

    在前后端分離跨域訪問的項目中shiro進(jìn)行權(quán)限攔截失效 (即使有正確權(quán)限的訪問也會被攔截) 時造成302重定向錯誤等問題,為解決這個問題,就需要進(jìn)行shiro過濾器的重寫以及配置。本文詳細(xì)介紹了解決方法,需要的可以參考一下
    2022-04-04
  • C++ 程序流程結(jié)構(gòu)詳解

    C++ 程序流程結(jié)構(gòu)詳解

    這篇文章主要介紹了C++程序的程序流程結(jié)構(gòu)以及關(guān)系和邏輯運算符講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2021-09-09
  • Spring MVC利用Swagger2如何構(gòu)建動態(tài)RESTful API詳解

    Spring MVC利用Swagger2如何構(gòu)建動態(tài)RESTful API詳解

    這篇文章主要給大家介紹了關(guān)于在Spring MVC中利用Swagger2如何構(gòu)建動態(tài)RESTful API的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Java實現(xiàn)顯示指定類型的文件

    Java實現(xiàn)顯示指定類型的文件

    這篇文章主要介紹了Java實現(xiàn)顯示指定類型的文件,需要的朋友可以參考下
    2014-03-03
  • Java用freemarker導(dǎo)出word實用示例

    Java用freemarker導(dǎo)出word實用示例

    本篇文章主要介紹了Java用freemarker導(dǎo)出word實用示例,使用freemarker的模板來實現(xiàn)功能,有需要的可以了解一下。
    2016-11-11
  • Mybatis和其他主流框架的整合使用過程詳解

    Mybatis和其他主流框架的整合使用過程詳解

    MyBatis最初是Apache的一個開源項目iBatis,?2010年6月這個項目由Apache?Software?Foundation遷移到了Google?Code,這篇文章主要介紹了Mybatis和其他主流框架的整合使用,需要的朋友可以參考下
    2023-11-11
  • 對arraylist中元素進(jìn)行排序?qū)嵗a

    對arraylist中元素進(jìn)行排序?qū)嵗a

    這篇文章主要介紹了對arraylist中元素進(jìn)行排序?qū)嵗a,還是比較不錯的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • JVM GC 垃圾收集梳理總結(jié)

    JVM GC 垃圾收集梳理總結(jié)

    這篇文章主要介紹了JVM GC 垃圾收集梳理總結(jié),GC是一種自動的存儲管理機(jī)制。當(dāng)一些被占用的內(nèi)存不再需要時,就應(yīng)該予以釋放,這種存儲資源管理,稱為垃圾回收
    2022-07-07
  • java對接webservice接口的4種方式總結(jié)

    java對接webservice接口的4種方式總結(jié)

    因工作需要和一個Sap相關(guān)系統(tǒng)以WebService的方式進(jìn)行接口聯(lián)調(diào),之前僅聽過這種技術(shù),但并沒有實操過,所以將本次開發(fā)進(jìn)行記錄,這篇文章主要給大家介紹了關(guān)于java對接webservice接口的4種方式,需要的朋友可以參考下
    2023-10-10

最新評論