中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當(dāng)前位置: 首頁(yè) / 技術(shù)干貨 / 正文
Set接口簡(jiǎn)介

2022-12-15

元素 hashset student 集合

  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)類,分別是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)類,它所存儲(chǔ)的元素是不可重復(fù)的,并且元素都是無(wú)序的。接下來(lái)通過(guò)一個(gè)案例演示HashSet集合的用法。  

Java
import java.util.HashSet;
import java.util.Iterator;

public class Example07 {
    public static void main(String[] args) {
        HashSet set = new HashSet(); // 創(chuàng)建HashSet集合
        set.add("張三"); // 向該Set集合中添加字符串
        set.add("李四");
        set.add("王五");
        set.add("李四"); // 向該Set集合中添加重復(fù)元素
        Iterator it = set.iterator(); // 獲取Iterator對(duì)象
        while (it.hasNext()) { // 通過(guò)while循環(huán),判斷集合中是否有元素
            Object obj = it.next(); // 如果有元素,就通過(guò)迭代器的next()方法獲取元素
            System.out.println(obj);
        }
    }
}

  從打印結(jié)果可以看出,取出元素的順序與添加元素的順序并不一致,并且重復(fù)存入的字符串對(duì)象“李四”被去除了,只添加了一次。

  HashSet集合之所以能確保不出現(xiàn)重復(fù)的元素,是因?yàn)樗诖嫒朐貢r(shí)做了很多工作。當(dāng)調(diào)用HashSet集合的add()方法存入元素時(shí),首先調(diào)用當(dāng)前存入對(duì)象的hashCode()方法獲得對(duì)象的哈希值,然后根據(jù)對(duì)象的哈希值計(jì)算出一個(gè)存儲(chǔ)位置。如果該位置上沒(méi)有元素,則直接將元素存入,如果該位置上有元素存在,則會(huì)調(diào)用equals()方法讓當(dāng)前存入的元素依次和該位置上的元素進(jìn)行比較,如果返回的結(jié)果為false就將該元素存入集合,返回的結(jié)果為true則說(shuō)明有重復(fù)元素,就將該元素舍棄。HashSet存儲(chǔ)元素的流程如下圖所示。

  根據(jù)前面的分析不難看出,當(dāng)向集合中存入元素時(shí),為了保證HashSet正常工作,要求在存入對(duì)象時(shí),重寫(xiě)Object類中的hashCode()和equals()方法。在上述案例中將字符串存入HashSet時(shí),String類已經(jīng)重寫(xiě)了Object類中的hashCode()和equals()方法。但是如果將自定義的Student對(duì)象存入HashSet,結(jié)果又如何呢?

  接下來(lái)通過(guò)一個(gè)案例演示向HashSet存儲(chǔ)字符串。 

Java
import java.util.HashSet;

class Student {
    String id;
    String name;

          // 創(chuàng)建構(gòu)造方法
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }

          // 重寫(xiě)toString()方法
    @Override
    public String toString() {
        return id + ":" + name;
    }
}
public class Example08 {
    public static void main(String[] args) {
        HashSet hs = new HashSet(); // 創(chuàng)建HashSet集合
        Student stu1 = new Student("1", "張三"); // 創(chuàng)建Student對(duì)象
        Student stu2 = new Student("2", "李四");
        Student stu3 = new Student("2", "李四");
        hs.add(stu1);
        hs.add(stu2);
        hs.add(stu3);
        System.out.println(hs);
    }
}

  在上述代碼的運(yùn)行結(jié)果中,出現(xiàn)了兩個(gè)相同的學(xué)生信息“2:李四”,這樣的學(xué)生信息應(yīng)該被視為重復(fù)元素,不允許同時(shí)出現(xiàn)在HashSet集合中。之所以沒(méi)有去掉這樣的重復(fù)元素,是因?yàn)樵诙xStudent類時(shí)沒(méi)有重寫(xiě)hashCode()和equals()方法。

  接下來(lái)對(duì)Student類進(jìn)行改寫(xiě),假設(shè)id相同的學(xué)生就是同一個(gè)學(xué)生,改寫(xiě)后代碼見(jiàn)下。  

Java
import java.util.HashSet;
import java.util.Objects;

class Student {
    String id;
    String name;

    // 創(chuàng)建構(gòu)造方法
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }

    // 重寫(xiě)toString()方法
    @Override
    public String toString() {
        return id + ":" + name;
    }

    // 重寫(xiě)hashCode方法
    @Override
    public int hashCode() {
        return id.hashCode(); // 返回id屬性的哈希值
    }

    // 重寫(xiě)equals方法
    @Override
    public boolean equals(Object o) {
        // 判斷是否是同一個(gè)對(duì)象,如果是,直接返回true
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        // 判斷對(duì)象是否為Student類型
        if (!(o instanceof Student)) return false;
        // 將對(duì)象強(qiáng)轉(zhuǎn)為Student類型
        Student student = (Student) o;
        // return (id == student.id) || (id != null && id.equals(student.id));
        return Objects.equals(id, student.id);
    }
}

public class Example09 {
    public static void main(String[] args) {
        HashSet hs = new HashSet(); // 創(chuàng)建HashSet集合
        Student stu1 = new Student("1", "張三"); // 創(chuàng)建Student對(duì)象
        Student stu2 = new Student("2", "李四");
        Student stu3 = new Student("2", "李四");
        hs.add(stu1);
        hs.add(stu2);
        hs.add(stu3);
        System.out.println(hs);
    }
}

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

  HashSet集合存儲(chǔ)的元素是無(wú)序的,如果想讓元素的存取順序一致,可以使用Java中提供的LinkedHashSet類,LinkedHashSet類是HashSet的子類,與LinkedList一樣,它也使用雙向鏈表來(lái)維護(hù)內(nèi)部元素的關(guān)系。

  接下來(lái)通過(guò)一個(gè)案例學(xué)習(xí)LinkedHashSet類的用法。 

Java
import java.util.Iterator;
import java.util.LinkedHashSet;

public class Example10 {
    public static void main(String[] args) {
        LinkedHashSet set = new LinkedHashSet();
        set.add("張三"); // 向該Set集合中添加字符串
        set.add("李四");
        set.add("王五");
        Iterator it = set.iterator(); // 獲取Iterator對(duì)象
        while (it.hasNext()) { // 通過(guò)while循環(huán),判斷集合中是否有元素
            Object obj = it.next();
            System.out.println(obj);
        }
    }
}

  通過(guò)運(yùn)行結(jié)果可以看出,元素迭代出來(lái)的順序和存入的順序是一致的。

分享: 更多

上一篇:foreach循環(huán)介紹

下一篇:TreeSet集合

好程序員公眾號(hào)

  • · 剖析行業(yè)發(fā)展趨勢(shì)
  • · 匯聚企業(yè)項(xiàng)目源碼

好程序員開(kāi)班動(dòng)態(tài)

More+
IT培訓(xùn)IT培訓(xùn)
在線咨詢
IT培訓(xùn)IT培訓(xùn)
試聽(tīng)
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報(bào)名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            久久婷婷色综合| 91精品欧美综合在线观看最新| 专区另类欧美日韩| 欧美日韩一区国产| 久久99热99| 亚洲欧美一区二区三区国产精品 | 欧美成人国产一区二区| 国产成人亚洲综合a∨婷婷| 亚洲婷婷国产精品电影人久久| 在线播放中文一区| 成人性视频免费网站| 亚洲第一电影网| 国产欧美一区二区精品性色| 欧美日韩一区精品| 国产成人精品一区二区三区四区| 一片黄亚洲嫩模| 久久久久久一二三区| 欧美伊人精品成人久久综合97 | 成人免费视频网站在线观看| 午夜久久久久久久久| 欧美高清在线视频| 日韩女同互慰一区二区| 欧美伊人久久久久久久久影院| 国产成人激情av| 日韩成人免费电影| 亚洲综合色自拍一区| 欧美激情一区二区| 精品国产一区二区三区忘忧草 | 精品免费日韩av| 欧美日韩专区在线| 色综合久久天天综合网| 国产成人午夜99999| 热久久久久久久| 亚洲福利视频三区| 亚洲人成小说网站色在线| 国产日韩欧美一区二区三区综合| 欧美一卡2卡3卡4卡| 欧美视频一区二区| 99久久婷婷国产精品综合| 国产福利一区二区三区视频在线 | 久久一区二区三区四区| 制服.丝袜.亚洲.中文.综合| 欧美嫩在线观看| 日韩亚洲国产中文字幕欧美| 色8久久人人97超碰香蕉987| 国产成人综合在线观看| 黄色小说综合网站| 精品亚洲免费视频| 麻豆精品一区二区综合av| 全国精品久久少妇| 免费人成网站在线观看欧美高清| 亚洲v日本v欧美v久久精品| 亚洲精品中文字幕乱码三区| 中文字幕制服丝袜一区二区三区 | 欧美一区二区在线观看| 欧美性xxxxx极品少妇| 欧美伊人久久久久久午夜久久久久| 成人精品视频一区二区三区尤物| 国产精品1024| 国产成人三级在线观看| 成人精品免费网站| 成人午夜免费视频| 99久久er热在这里只有精品15| 99久久99久久精品免费观看| 99精品国产91久久久久久| 99久久综合国产精品| 91片在线免费观看| 在线观看日韩电影| 欧美精品aⅴ在线视频| 欧美一区二区三区不卡| 亚洲精品在线免费观看视频| 久久毛片高清国产| 国产精品女主播av| 亚洲综合图片区| 日韩在线一区二区三区| 国产在线乱码一区二区三区| 国产69精品久久777的优势| 97精品国产露脸对白| 欧美在线看片a免费观看| 91精品国产91久久久久久最新毛片 | 亚洲精品国产第一综合99久久 | 亚洲一区免费视频| 日韩激情视频在线观看| 国产在线视频不卡二| 91在线观看地址| 欧美精选午夜久久久乱码6080| 欧美videos中文字幕| 中文字幕一区二区三区色视频| 亚洲国产日韩综合久久精品| 国产一区二区三区黄视频| 91亚洲精品久久久蜜桃| 在线不卡一区二区| 国产精品超碰97尤物18| 日韩精品一级中文字幕精品视频免费观看 | 日韩福利电影在线| 粉嫩蜜臀av国产精品网站| 欧洲亚洲国产日韩| 久久综合九色综合97_久久久| 亚洲乱码国产乱码精品精98午夜| 免费成人在线观看视频| 成人一道本在线| 欧美精品电影在线播放| 国产精品久久久久影院亚瑟| 日韩电影在线一区| 91丨九色丨黑人外教| 欧美大片在线观看| 亚洲一卡二卡三卡四卡无卡久久 | 欧美性大战xxxxx久久久| 久久精品一二三| 婷婷亚洲久悠悠色悠在线播放| 欧美亚洲国产bt| 欧洲视频一区二区| 欧美成人精品3d动漫h| 1024精品合集| 久久99久久99精品免视看婷婷 | 亚洲午夜久久久久| 成人综合日日夜夜| 日韩一区二区三区av| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 秋霞午夜av一区二区三区| 91国偷自产一区二区三区成为亚洲经典 | 国产高清一区日本| 日韩一区二区免费高清| 亚洲夂夂婷婷色拍ww47| 99在线热播精品免费| 久久综合狠狠综合久久综合88| 三级欧美在线一区| 91福利视频网站| 亚洲人成网站在线| 成人国产精品免费观看动漫| 精品国产伦理网| 日本成人在线一区| 欧美视频在线观看一区| 一区二区三区美女视频| 99精品一区二区| 国产精品免费久久久久| 国产不卡一区视频| 久久久久久久久久久黄色| 久久aⅴ国产欧美74aaa| 欧美一级国产精品| 日韩黄色小视频| 91精品在线观看入口| 日韩国产精品大片| 欧美一区日本一区韩国一区| 亚洲va欧美va人人爽| 在线91免费看| 欧美三级视频在线| 欧美色偷偷大香| 一区二区国产视频| 在线观看av一区| 亚洲综合一二三区| 欧美亚洲一区三区| 午夜精品一区在线观看| 在线免费观看成人短视频| 亚洲精品大片www| 欧美日韩国产高清一区二区三区 | 亚洲一区免费在线观看| 欧美日韩一区二区三区在线| 日韩黄色免费网站| 精品美女一区二区| 国产乱子伦视频一区二区三区 | 国产精品综合久久| 国产日韩av一区二区| 成人h动漫精品一区二| 亚洲欧美日韩一区二区三区在线观看| 色噜噜夜夜夜综合网| 丝瓜av网站精品一区二区| 日韩免费看的电影| 成人中文字幕电影| 亚洲愉拍自拍另类高清精品| 91精品国产全国免费观看| 国产一区亚洲一区| 亚洲欧洲av在线| 欧美日韩一区二区三区在线看 | 香蕉成人伊视频在线观看| 日韩欧美一区二区三区在线| 国产一区二区三区精品视频| 亚洲人成在线播放网站岛国| 欧美日韩另类国产亚洲欧美一级| 免费av成人在线| 欧美激情在线一区二区三区| 色综合婷婷久久| 美国欧美日韩国产在线播放| 国产精品久久国产精麻豆99网站| 欧美在线短视频| 久久99精品久久久久久| 日韩伦理av电影| 日韩欧美激情四射| 99国产精品国产精品久久| 日本欧美一区二区在线观看| 国产农村妇女精品| 欧美日韩精品欧美日韩精品一| 国产精品伊人色| 亚洲精品成人天堂一二三| 日韩免费看网站| 色噜噜狠狠成人网p站| 久久精品久久99精品久久| 亚洲精品日韩综合观看成人91| 欧美大片免费久久精品三p | 欧美sm美女调教|