栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java集合类之Set的TreeSet之整理电话簿

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java集合类之Set的TreeSet之整理电话簿

文章目录
  • 相关知识
    • 什么是 TreeSet 集合
    • 创建 TreeSet 集合
    • TreeSet 集合的无序性
    • TreeSet 集合的有序性
    • TreeSet 集合自定义排序

相关知识 什么是 TreeSet 集合

TreeSet 集合是 Set 集合的实现类,因此它也具有元素唯一性和无序性,它的底层数据结构是 TreeMap 树结构,它确保元素的唯一性是通过 Compareable 接口的 compareto 方法,另外,它既是无序的,又是有序的。无序指的是存储元素顺序和输出顺序不同,有序指的是遍历集合时,输出的所有元素是有序的。

创建 TreeSet 集合

使用以下代码即可创建 TreeSet 集合。

public static void main(String[] args) {
        // 创建存储字符串的TreeSet集合
        Set set = new TreeSet<>();
    }
TreeSet 集合的无序性

在以下代码中,往集合中存储元素的顺序为:123-aa-a,输出顺序却是123-a-aa,这就是 TreeSet 集合的无序性,即存储元素顺序和提取顺序不同。

public static void main(String[] args) {
        // 创建存储字符串的TreeSet集合
        Set set = new TreeSet<>();
        // 添加元素
        set.add("123");
        set.add("aa");
        set.add("a");
        // 打印集合
        System.out.print(set);
    }

执行结果:

[123,a,aa]

TreeSet 集合的有序性

添加元素到 TreeSet 集合时,TreeSet 集合会调用元素的 compareTo() 方法来比较元素之间的大小关系,并将集合元素按升序排列,这就是它的有序性,下表展示了 TreeSet 集合对各种数据类型的默认排序规则:

元素类型 排序方式
数值类型 按数值大小
Character类型 按字符的 unicode 值来进行比较
Boolean类型 true 大于 false
String类型 按字符串中字符的 unicode 值进行比较
Date、Time类型 后边的时间、日期比前面的时间、日期大
以下代码中,往集合中分别添加元素 true 和 false,根据默认排序规则,输出结果为:[false,true]。

public static void main(String[] args) {
        // 创建存储Boolean类型的TreeSet集合
        Set set = new TreeSet<>();
        // 判断集合是否为空
        boolean empty = set.isEmpty();
        System.out.println(empty);
        // 添加元素
        set.add(empty);     
        set.add(false);
        // 打印集合
        System.out.print(set);
    }

执行结果:

true
[false, true]

TreeSet 集合自定义排序

如果需要实现自定义排序,例如降序,则可以使用 Comparator 接口,该接口里包含一个 compare(T o1, T o2)方法,该方法用于比较 o1 和 o2 的大小。在创建 TreeSet 集合对象时,提供一个 Comparator 对象与该 TreeSet 集合关联,该 Comparator 对象负责集合元素的排序逻辑。

自定义降序输出示例:

import java.util.*;
// 自定义类实现Comparator
class DescSort implements Comparator {
    // 重写compare方法
    public int compare(Integer s1, Integer s2) {
        // 如果第一个数大于第二个数,返回负数,默认为正数
        if (s1.compareTo(s2) > 0)
            return -1;
        // 如果第一个数小于第二个数,返回正数,默认为负数
        else if (s1.compareTo(s2) < 0)
            return 1;
        // 如果第一个数等于第二个数,返回0
        else
            return 0;
    }
}
public class tt {
    public static void main(String[] args) {
        // 创建存储整数的TreeSet集合
        Set set = new TreeSet<>();
        // 创建Comparator对象
        Comparator comp = new DescSort();
        // 把Comparator对象与TreeSet对象关联
        set = new TreeSet(comp);
        // 添加元素
        for (int i = 9; i < 14; i++)
            set.add(i);
        // 打印集合
        System.out.print(set);
    }
}

执行结果:

[13, 12, 11, 10, 9]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号