第十七章-容器深入研究--Set

Set:存入Set的每個(gè)元素都必須是唯一的,因?yàn)镾et不保存重復(fù)元素。加入Set的元素必須定義equals()方法以確保對(duì)象的唯一性。Set接口不保證維護(hù)元素的次序。Set接口有以下三個(gè)實(shí)現(xiàn)類:

1.HashSet : 為快速查找而設(shè)計(jì)的Set误堡。存入HashSet的元素必須定義hashCode()。(如果沒有其他限制雏吭,默認(rèn)應(yīng)該選擇這個(gè)Set)
2.TreeSet : 保持次序的Set锁施,底層為樹結(jié)構(gòu)。使用它可以從Set中提取有序的序列杖们。元素必須實(shí)現(xiàn)Comparable接口悉抵,按照排序順序維護(hù)元素,若不實(shí)現(xiàn)Comparable接口將會(huì)跑出異常摘完。
3.LinkedHashSet : 具有HashSet的查詢速度姥饰,內(nèi)部使用鏈表維護(hù)元素插入的順序。使用迭代器遍歷Set時(shí)孝治,結(jié)果會(huì)按元素插入的次序顯示列粪。元素也必須定義hashCode()方法,實(shí)際上使用迭代器遍歷時(shí)速度會(huì)比HashSet速度快谈飒,因?yàn)閮?nèi)部是鏈表岂座。

根據(jù)實(shí)驗(yàn)得出結(jié)論:
1.當(dāng)向HashSet中添加元素時(shí),HashSet會(huì)優(yōu)先比較元素的hashCode()方法的返回值杭措,若發(fā)現(xiàn)容器中有其他元素?fù)碛邢嗤膆ashCode()返回值费什,則會(huì)去執(zhí)行equals()方法是否是同一個(gè)元素,若equals()方法返回true,則不加入容器瓤介,若equals()返回false,則加入容器赘那。

SortedSet
SortedSet中的元素保證處于排序狀態(tài),TreeSet是目前唯一實(shí)現(xiàn)該接口的類刑桑。
該接口的一些方法:
1.Object first() 返回容器的第一元素
2.Object last() 返回容器的最末一個(gè)元素
3.SortedSet subSet(fromElement, toElement) 生成Set的子集,從fromElement(包含)開始帶toElement(不包含)
4.SortedSet headSet(toElement) 生成此Set的子集募舟,由小于toElement的元素組成
5.SortedSet tailSet(fromElement) 生成此Set的子集祠斧, 由大于或等于fromElement的元素組成

隊(duì)列
Queue在JavaSE5中僅有的兩個(gè)實(shí)現(xiàn)是LinkedList和PriorityQueue,
LikedList是普通隊(duì)列,實(shí)現(xiàn)先進(jìn)先出
PriorityQueue是優(yōu)先級(jí)隊(duì)列拱礁,在隊(duì)列中優(yōu)先級(jí)最高的元素將先從另一端出隊(duì)琢锋,優(yōu)先級(jí)排序通過實(shí)現(xiàn)Comparable接口實(shí)現(xiàn),元素將按照定義的comparaTo()方法定義的排序規(guī)則進(jìn)行排序呢灶。

/**
Person.java
*/
public class Person implements Comparable{

    private String name;

    private String sex;

    private int age;

    public Person(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Person(String name) {
        this.name = name;
    }

    public Person() {
    }


    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object obj) {
        System.out.println("equals() methods is execute!" + this.toString());
        if (obj instanceof Person){
            Person person = (Person)obj;
            if (this.name == person.getName()){
                return true;
            }else {
                return false;
            }
        }else {
            return false;
        }

    }

    @Override
    public int hashCode() {
        System.out.println("hashCode() methods is execute!" + name);
        return name.hashCode();
    }



    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        System.out.println("compareTo() methods is execute!" + this.toString() + " compareTo " + o.toString());
        if (o instanceof Person){
            Person person = (Person)o;
            System.out.println(this.name.compareTo(person.getName()));
            return this.name.compareTo(person.getName());
        }else {
            return -1;
        }
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

/**
  測(cè)試
*/
PriorityQueue<Person> priorityQueue = new PriorityQueue<Person>();
priorityQueue.offer(new Person("aaaa"));
priorityQueue.offer(new Person("cccc"));
priorityQueue.offer(new Person("bbbb"));
for (int i = 0; i < 3; i++) {
    System.out.println(priorityQueue.remove());
}
結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吴超,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸯乃,更是在濱河造成了極大的恐慌鲸阻,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸟悴,居然都是意外死亡陈辱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門细诸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沛贪,“玉大人,你說我怎么就攤上這事震贵±常” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵屏歹,是天一觀的道長(zhǎng)隐砸。 經(jīng)常有香客問我,道長(zhǎng)蝙眶,這世上最難降的妖魔是什么季希? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮幽纷,結(jié)果婚禮上式塌,老公的妹妹穿的比我還像新娘。我一直安慰自己友浸,他們只是感情好峰尝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著收恢,像睡著了一般武学。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伦意,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天火窒,我揣著相機(jī)與錄音,去河邊找鬼驮肉。 笑死熏矿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的离钝。 我是一名探鬼主播票编,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼卵渴!你這毒婦竟也來了慧域?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤浪读,失蹤者是張志新(化名)和其女友劉穎吊趾,沒想到半個(gè)月后宛裕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡论泛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年揩尸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屁奏。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岩榆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坟瓢,到底是詐尸還是另有隱情勇边,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布折联,位于F島的核電站粒褒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诚镰。R本人自食惡果不足惜奕坟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望清笨。 院中可真熱鬧月杉,春花似錦、人聲如沸抠艾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)检号。三九已至腌歉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間齐苛,已是汗流浹背翘盖。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脸狸,地道東北人最仑。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓藐俺,卻偏偏與公主長(zhǎng)得像炊甲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欲芹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Java集合框架 Java平臺(tái)提供了一個(gè)全新的集合框架卿啡。“集合框架”主要由一組用來操作對(duì)象的接口組成菱父。不同接口描述...
    小石38閱讀 360評(píng)論 0 0
  • 從三月份找實(shí)習(xí)到現(xiàn)在颈娜,面了一些公司剑逃,掛了不少,但最終還是拿到小米官辽、百度蛹磺、阿里、京東同仆、新浪萤捆、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,241評(píng)論 11 349
  • 上一篇文章介紹了Set集合的通用知識(shí)俗批。Set集合中包含了三個(gè)比較重要的實(shí)現(xiàn)類:HashSet俗或、TreeSet和En...
    Ruheng閱讀 15,640評(píng)論 3 57
  • 3.3 集合 一方面, 面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式岁忘,為了方便對(duì)多個(gè)對(duì)象的操作辛慰,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)。另...
    閆子揚(yáng)閱讀 728評(píng)論 0 1
  • 面向?qū)ο笾饕槍?duì)面向過程干像。 面向過程的基本單元是函數(shù)帅腌。 什么是對(duì)象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,054評(píng)論 0 4