最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java集合類之TreeSet的用法詳解

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

上節(jié)回顧

LinkedHashSet集合概述及特點(diǎn)

LinkedHashSet集合特點(diǎn)

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

LinkedHashSet集合的儲(chǔ)存和遍歷:

import java.util.LinkedHashSet;

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

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


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

TreeSet集合概述和特點(diǎn)

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 實(shí)現(xiàn)。使用元素的自然順序?qū)υ剡M(jìn)行排序,或者根據(jù)創(chuàng)建 set 時(shí)提供的 Comparator 進(jìn)行排序,具體取決于使用的構(gòu)造方法。

構(gòu)造方法

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

方法摘要

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

總結(jié)

TreeSet集合特點(diǎn)

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

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

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

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

Demo

package com.ithmm_03;

import java.util.TreeSet;

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

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

        ts.add(30);

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

控制臺(tái)輸出:

10 18 30 40 90

自然排序Comparable的使用

接口 Comparable< T>

類型參數(shù):

T - 可以與此對(duì)象進(jìn)行比較的那些對(duì)象的類型

此接口強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類的對(duì)象進(jìn)行整體排序。這種排序被稱為類的自然排序,類的 compareTo 方法被稱為它的自然比較方法。

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

總結(jié):

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

Demo:

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

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

學(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;//升序存儲(chǔ)
       // return -1;//降序存儲(chǔ)

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

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

測(cè)試類:

import java.util.TreeSet;

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

        //創(chuàng)建學(xué)生對(duì)象
        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());
        }
    }
}

控制臺(tái)輸出:

liubing 18
zhaoxiao 18
wangyi 24
xiaozhan 29
hanyan 30

比較器排序Comparator的使用

Demo:

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

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

學(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;
    }

}

測(cè)試類:

import java.util.TreeSet;

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

        //創(chuàng)建學(xué)生對(duì)象
        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集合存儲(chǔ)自定義對(duì)象,代參構(gòu)造方法使用的是比較器排序?qū)υ剡M(jìn)行排序的

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

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

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

相關(guān)文章

最新評(píng)論

新巴尔虎右旗| 汉川市| 灵宝市| 河源市| 大同县| 綦江县| 贡觉县| 广水市| 新余市| 大同县| 资溪县| 永胜县| 焦作市| 徐汇区| 台前县| 万山特区| 泰来县| 西昌市| 抚宁县| 育儿| 托克逊县| 馆陶县| 五家渠市| 云浮市| 高安市| 芜湖县| 闸北区| 望谟县| 广水市| 武强县| 澄城县| 丰城市| 嵩明县| 游戏| 凯里市| 西丰县| 江门市| 永吉县| 丰都县| 富平县| 澎湖县|