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

Java集合類之TreeSet的用法詳解

 更新時間:2022年08月23日 08:24:18   作者:小新愛學(xué)習(xí).  
這篇文章主要為大家詳細(xì)介紹了Java集合類中TreeSet的用法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,感興趣的可以了解一下

上節(jié)回顧

LinkedHashSet集合概述及特點

LinkedHashSet集合特點

  • 哈希表和鏈表實現(xiàn)Set接口,具有可預(yù)測的迭代次序
  • 由鏈表保證元素有序,也就是說元素的存儲和取出順序是一致的
  • 由哈希表保證元素唯一,也就是說沒有重復(fù)元素

LinkedHashSet集合的儲存和遍歷:

import java.util.LinkedHashSet;

/**
 * LinkedListSet 集合特點
 *      1.哈希表和鏈表實現(xiàn)Set接口,具有可預(yù)測的迭代次序
 *      2.由鏈表保證元素有序,也就是說元素的存儲和取出順序是一致的
 *      3.由哈希表保證元素唯一,也就是說沒有重復(fù)元素
 */
public class LinkedHashSetDemo {
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        LinkedHashSet<String> linkHashSet = new LinkedHashSet<String>();

        //添加元素
        linkHashSet.add("hello");
        linkHashSet.add("world");
        linkHashSet.add("java");


        linkHashSet.add("hello");
        //遍歷集合(增強for)
        for(String s:linkHashSet){
            System.out.println(s);
        }
    }
}

TreeSet集合概述和特點

java.util

類 TreeSet

java.lang.Object

繼承者 java.util.AbstractCollection< E>

繼承者 java.util.AbstractSet< E>

繼承者 java.util.TreeSet< E>

public class TreeSet< E>
extends AbstractSet< E>
implements NavigableSet< E>, Cloneable, Serializable

基于 TreeMap 的 NavigableSet 實現(xiàn)。使用元素的自然順序?qū)υ剡M行排序,或者根據(jù)創(chuàng)建 set 時提供的 Comparator 進行排序,具體取決于使用的構(gòu)造方法。

構(gòu)造方法

構(gòu)造方法描述
TreeSet()構(gòu)造一個新的空 set,該 set 根據(jù)其元素的自然順序進行排序
TreeSet(Collection<? extends E> c)構(gòu)造一個包含指定 collection 元素的新 TreeSet,它按照其元素的自然順序進行排序
TreeSet(Comparator<? super E> comparator)構(gòu)造一個新的空 TreeSet,它根據(jù)指定比較器進行排序
TreeSet(SortedSet s)構(gòu)造一個與指定有序 set 具有相同映射關(guān)系和相同排序的新 TreeSet

方法摘要

方法說明
boolean add(E e)將指定的元素添加到此 set(如果該元素尚未存在于 set 中)
void clear()移除此 set 中的所有元素
Iterator iterator()返回在此 set 中的元素上按升序進行迭代的迭代器
boolean remove(Object o)將指定的元素從 set 中移除(如果該元素存在于此 set 中)

總結(jié)

TreeSet集合特點

元素有序,這里的順序不是指存儲和取出的順序,而是按照一定的規(guī)則進行排序,具體排序方法取決于構(gòu)造方法

  • TreeSet() |構(gòu)造一個新的空 set,該 set 根據(jù)其元素的自然順序進行排序。
  • TreeSet(Comparator<? super E> comparator) |構(gòu)造一個新的空 TreeSet,它根據(jù)指定比較器進行排序。

沒有帶索引的方法,所以不能使用普通for循環(huán)遍歷

由于是Set集合,所以不包含重復(fù)元素的集合

Demo

package com.ithmm_03;

import java.util.TreeSet;

/**
 * TreeSet集合特點
 *
 * 元素有序,這里的順序不是指存儲和取出的順序,而是按照一定的規(guī)則進行排序,具體排序方法取決于構(gòu)造方法
 * TreeSet() |構(gòu)造一個新的空 set,該 set 根據(jù)其元素的自然順序進行排序。
 * TreeSet(Comparator<? super E> comparator) |構(gòu)造一個新的空 TreeSet,它根據(jù)指定比較器進行排序。
 * 沒有帶索引的方法,所以不能使用普通for循環(huán)遍歷
 * 由于是Set集合,所以不包含重復(fù)元素的集合
 */
public class TreeSetDemo01 {
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        TreeSet<Integer> ts = new TreeSet<Integer>();

        //添加元素
        ts.add(10);
        ts.add(40);
        ts.add(90);
        ts.add(30);
        ts.add(18);

        ts.add(30);

        //遍歷集合(增強For)
        for(Integer s:ts){
            System.out.println(s);
        }
    }
}

控制臺輸出:

10 18 30 40 90

自然排序Comparable的使用

接口 Comparable< T>

類型參數(shù):

T - 可以與此對象進行比較的那些對象的類型

此接口強行對實現(xiàn)它的每個類的對象進行整體排序。這種排序被稱為類的自然排序,類的 compareTo 方法被稱為它的自然比較方法。

實現(xiàn)此接口的對象列表(和數(shù)組)可以通過 Collections.sort(和 Arrays.sort)進行自動排序。實現(xiàn)此接口的對象可以用作有序映射中的鍵或有序集合中的元素,無需指定比較器。

總結(jié):

  • 用TreeSet集合存儲自定義對象,無參構(gòu)造方法使用的是自然排序?qū)υ剡M行排序的
  • 自認(rèn)排序,就是讓元素所屬的類實現(xiàn)Compareable接口,重寫compareTo(To)方法
  • 重寫方法時,一定注意排序規(guī)則必須按照要求的主要條件和次要調(diào)價來寫

Demo:

儲存學(xué)生對象并遍歷,創(chuàng)建TreeSet集合使用無參構(gòu)造

要求:按照年齡從小到大排序,年齡相同時,按照姓名的字幕順序排序

學(xué)生類:

package com.ithmm_03;



public class Student  implements Comparable<Student> {
    private String name;
    private int age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public int compareTo(Student s) {
      //  return 0;//認(rèn)為是重復(fù)元素,不添加
       // return 1;//升序存儲
       // return -1;//降序存儲

        //按照年齡從從小到大排序
        int num = this.age - s.age;
        //按照年齡從大到小排序
        //int num = s.age - this.age;

        //年齡相同時,按照姓名首字母順序排序
       int num2  = num==0?this.name.compareTo(s.name):num;
        return num2;
    }
}

測試類:

import java.util.TreeSet;

public class TreeSetDemo02  {
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        TreeSet <Student> ts = new TreeSet<Student>();

        //創(chuàng)建學(xué)生對象
        Student s1 = new Student("xiaozhan",29);
        Student s2 = new Student("wangyi",24);
        Student s3 = new Student("hanyan",30);
        Student s4 = new Student("zhaoxiao",18);

        Student s5 = new Student("liubing",18);

        //把學(xué)生添加到集合
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);

        //遍歷集合
        for(Student s : ts){
            System.out.println(s.getName() + " " + s.getAge());
        }
    }
}

控制臺輸出:

liubing 18
zhaoxiao 18
wangyi 24
xiaozhan 29
hanyan 30

比較器排序Comparator的使用

Demo:

存儲學(xué)生對象并遍歷,創(chuàng)建TreeSet集合使用帶參構(gòu)造方法

要求:按照年齡從小到大排序,年齡相同時,按照姓名的字幕順序排序

學(xué)生類:

public class Student {
    private String name;
    private int age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

}

測試類:

import java.util.TreeSet;

public class TreeSetDemo02  {
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        TreeSet <Student> ts = new TreeSet<Student>();

        //創(chuàng)建學(xué)生對象
        Student s1 = new Student("xiaozhan",29);
        Student s2 = new Student("wangyi",24);
        Student s3 = new Student("hanyan",30);
        Student s4 = new Student("zhaoxiao",18);

        Student s5 = new Student("liubing",18);

        //把學(xué)生添加到集合
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);


        //遍歷集合
        for(Student s : ts){
            System.out.println(s.getName() + " " + s.getAge());
        }
    }
}

總結(jié):

用TreeSet集合存儲自定義對象,代參構(gòu)造方法使用的是比較器排序?qū)υ剡M行排序的

比較器排序,就是讓集合構(gòu)造方法接收Comparator的實現(xiàn)類對象,重寫compare(To1,To2)方法

重寫方法時,一定要注意排序規(guī)則必須按照要求的主要條件和次要條件

到此這篇關(guān)于Java集合類之TreeSet的用法詳解的文章就介紹到這了,更多相關(guān)Java TreeSet內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中的key接口解析

    java中的key接口解析

    這篇文章主要介紹了java中的key接口,有需要的朋友可以參考一下
    2014-01-01
  • java位運算加密示例

    java位運算加密示例

    通過位運算中的"^"異或運算符把字符串與一個指定的值進行異或運算,從而改變字符串每個字符的值,這樣就可以得到一個加密后的字符串
    2014-02-02
  • 項目打包成jar后包無法讀取src/main/resources下文件的解決

    項目打包成jar后包無法讀取src/main/resources下文件的解決

    本文主要介紹了項目打包成jar后包無法讀取src/main/resources下文件的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 如何用Java?幾分鐘處理完?30?億個數(shù)據(jù)(項目難題)

    如何用Java?幾分鐘處理完?30?億個數(shù)據(jù)(項目難題)

    現(xiàn)有一個 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計,今天小編通過本文給大家講解如何用Java?幾分鐘處理完?30?億個數(shù)據(jù),這個問題一直以來是項目難題,今天通過本文給大家詳細(xì)介紹下,感興趣的朋友一起看看吧
    2022-07-07
  • hadoop之MapReduce框架原理

    hadoop之MapReduce框架原理

    這篇文章主要介紹了hadoop的MapReduce框架原理,MapReduce是分為兩個階段的,MapperTask階段,和ReduceTask階段。如果有感興趣的小伙伴可以借鑒參考
    2023-03-03
  • Java 多線程實例詳解(三)

    Java 多線程實例詳解(三)

    本文主要介紹 java 線程安全的知識,這里整理了相關(guān)資料及實現(xiàn)示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • Java實現(xiàn)帶有權(quán)重隨機算法的示例詳解

    Java實現(xiàn)帶有權(quán)重隨機算法的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java如何實現(xiàn)帶有權(quán)重隨機算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Java中二維數(shù)組的正確使用方法介紹

    Java中二維數(shù)組的正確使用方法介紹

    Java中有一維數(shù)組,二維數(shù)組以及多維數(shù)組,在這篇文章中,將給大家詳細(xì)介紹一下如何正確使用Java中的二維數(shù)組,感興趣的小伙伴跟著小編一起學(xué)習(xí)吧
    2023-05-05
  • SpringMVC日期類型接收空值異常問題解決方法

    SpringMVC日期類型接收空值異常問題解決方法

    這篇文章主要介紹了SpringMVC日期類型接收空值異常問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 使用spring@value加載時機

    使用spring@value加載時機

    這篇文章主要介紹了使用spring@value加載時機方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論