国产精品色哟哟_男男激情3p互攻_色偷偷影院_和女同学厕所做了四次

當(dāng)前位置: 首頁 / 技術(shù)干貨 / 正文
TreeSet集合

2022-12-15

treeset 方法 student ts 集合

  TreeSet集合

  HashSet集合存儲的元素是無序的和不可重復(fù)的,為了對集合中的元素進(jìn)行排序,Set接口提供了另一個可以對HashSet集合中元素進(jìn)行排序的類——TreeSet。

  接下來通過一個案例演示TreeSet集合的用法。

Java
import java.util.TreeSet;

public class demo11 {
    public static void main(String[] args) {
        TreeSet ts = new TreeSet();
        ts.add(3);
        ts.add(1);
        ts.add(1);
        ts.add(2);
        ts.add(3);
        System.out.println(ts);
    }
}

  上述代碼中,從打印結(jié)果可以看出,添加的元素已經(jīng)自動排序,并且重復(fù)存入的整數(shù)1和3只添加了一次。

  TreeSet集合之所以可以對添加的元素進(jìn)行排序,是因為元素的類可以實現(xiàn)Comparable接口 (基本類型的包裝類,String類都實現(xiàn)了該接口),Comparable接口強(qiáng)行對實現(xiàn)它的每個類的對象進(jìn)行整體排序,這種排序被稱為類的自然排序。Comparable接口的compareTo()方法被稱為自然比較方法。如果將自定義的Student對象存入TreeSet,TreeSet將不會對添加的元素進(jìn)行排序,Student對象必須實現(xiàn)Comparable接口并重寫compareTo()方法實現(xiàn)對象元素的順序存取。

  接下來通過一個案例講解使用compareTo()方法實現(xiàn)對象元素的順序存取。  

Java
import java.util.TreeSet;

class Student implements Comparable<Student> {
    private String id;
    private String name;

    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }

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

    @Override
    public int compareTo(Student o) {
        // return 0; // 集合中只有一個元素
        // return 1; // 集合按照怎么存就怎么取
        return -1; // 集合按照存入順序倒過來進(jìn)行存儲
    }
}

public class Example12 {
    public static void main(String[] args) {
        TreeSet ts = new TreeSet();
        ts.add(new Student("1", "張三"));
        ts.add(new Student("2", "李四"));
        ts.add(new Student("3", "王五"));
        System.out.println(ts);
    }
}

  從運行結(jié)果可以看出,TreeSet按照存入元素的順序倒過來存入了集合中,因為Student類實現(xiàn)了Comparable接口,并重寫了compareTo()方法,當(dāng)compareTo()方法返回0的時候集合中只有一個元素;當(dāng)compareTo()方法返回正數(shù)的時候集合會正常存取;當(dāng)compareTo()方法返回負(fù)數(shù)的時候集合會倒序存儲。

  上面介紹了TreeSet集合的自然排序,它還有另一種實現(xiàn)排序的方式,即實現(xiàn)Comparator接口,重寫compare()方法和equals()方法,但是由于所有的類默認(rèn)繼承Object,而Object中有equals()方法,所以自定義比較器類時,不用重寫equals()方法,只需要重寫compare()方法,這種排序被稱為比較器排序。

  接下來通過一個案例學(xué)習(xí)將自定義的Student對象通過比較器的方式存入TreeSet集合。  

Java
package com.cy.demo13;
import java.util.Comparator;
import java.util.TreeSet;

class Student {
    private String id;
    private String name;

    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }

    // 重寫toString()方法
    @Override
    public String toString() {
        return id + ":" + name;
    }
}
public class Example13 {
    public static void main(String[] args) {
        TreeSet ts = new TreeSet(new Comparator() {
            @Override
            public int compare(Object o1. Object o2) {
                return -1;
            }
        });
        ts.add(new Student("1", "張三"));
        ts.add(new Student("2", "李四"));
        ts.add(new Student("3", "王五"));
        System.out.println(ts);
    }
}

分享: 更多

上一篇:Set接口簡介

下一篇:Map接口與HashMap集合

好程序員公眾號

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

好程序員開班動態(tài)

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數(shù)據(jù)+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發(fā) <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數(shù)據(jù)分析 <高端班>

    開班時間:2021-07-12(北京)

    預(yù)約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發(fā) <高端班>

    開班時間:2021-07-12(北京)

    預(yù)約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓(xùn)IT培訓(xùn)
在線咨詢
IT培訓(xùn)IT培訓(xùn)
試聽
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報名
IT培訓(xùn)

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