首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:集合概述
第二章:Collection 接口
2.1 概述
2.2 常用方法
第三章:Iterator 迭代器
3.1 Iterator 接口
3.2 迭代器实现原理
3.3 使用 Iterator 迭代器删除元素
3.4 并发修改异常
3.5 集合存储自定义对象并迭代
3.6 增强 for 循环
3.7 java.lang.Iterable 接口
第四章:List 接口
4.1 概述
4.2 常用方法
4.3 List 特有的迭代器 ListIterator
4.4 List 接口的实现类:ArrayList
4.5 List 接口的实现类:LinkedList
第五章:Set 接口
5.1 概述
5.2 Set 的实现类:HashSet
5.3 Set 的实现类之三:TreeSet
第六章:Collections 工具类
6.1 概述
6.2 常用方法
6.3 Collections 的同步控制方法
第七章:Map 接口
7.1 概述
Map 接口常用的方法
7.2 Map 的实现类:HashMap
7.3 Map 的实现类:LinkedHashMap
7.4 Map 的实现类:Hashtable
7.5 Map 的实现类:TreeMap
7.6 Map 的实现类:Properties
当前位置:
首页>>
技术小册>>
Java语言基础10-Java中的集合
小册名称:Java语言基础10-Java中的集合
5.3.1 概述 - TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。 - TreeSet 底层使用红黑树结构存储数据,在内部使用的是 TreeMap 来实现的。 ![](/uploads/images/20230726/eede600b16f466d37146c6d7f28afa8c.png) TreeSet 有两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。 5.3.2 自然排序 - 自然排序:TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序(默认情况)排列。 - 如果视图将一个对象添加到 TreeSet 中,则该对象所属的类必须实现 Comparable 接口。 - Comparable 的实现: - BigDecimal 、BigInteger 以及所有的数值型对应的包装类:按照它们对应的数值大小进行比较。 - Character :按照字符的 Unicode 值进行比较。 - Boolean :true 对应的包装类实例大于 false 对应的包装类实例。 - String :按照字符串中字符的 Unicode 值进行比较。 - Date 、Time :后面的时间、日期比前面的时间、日期大。 - 示例: ``` package com.github.set.demo4; import java.util.Set; import java.util.TreeSet; /** * @author maxiaoke.com * @version 1.0 * */ public class Test { public static void main(String[] args) { Set<String> set = new TreeSet<>(); set.add("g"); set.add("b"); set.add("d"); set.add("c"); set.add("f"); System.out.println("set = " + set); // set = [b, c, d, f, g] } } ``` 示例: ``` package com.github.set.demo5; /** * @author maxiaoke.com * @version 1.0 * */ public class Person implements Comparable<Person> { private String name; private int age; public Person() {} public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Person o) { return Integer.compare(this.getAge(), o.getAge()); } @Override public String toString() { return "Person{" + "name='" + this.name + '\'' + ", age='" + this.age + '\'' + '}'; } } ``` ``` package com.github.set.demo5; import java.util.Set; import java.util.TreeSet; /** * @author maxiaoke.com * @version 1.0 * */ public class Test { public static void main(String[] args) { Set<Person> set = new TreeSet<>(); set.add(new Person("张三", 15)); set.add(new Person("李四", 99)); set.add(new Person("王五", 58)); set.add(new Person("赵六", 9)); set.add(new Person("田七", 1)); set.add(new Person("王八", 44)); // set = [Person{name='田七', age='1'}, Person{name='赵六', age='9'}, Person{name='张三', age='15'}, Person{name='王八', // age='44'}, Person{name='王五', age='58'}, Person{name='李四', age='99'}] System.out.println("set = " + set); } } ``` 5.3.3 定制排序 - 定制排序,通过 Comparator 接口来实现。需要重写 compare(T o1,T o2) 方法。 - 利用 int compare(T o1,T o2) 方法,比较 o1 和 o2 的大小:如果方法返回正整数,则表示 o1 大于 o2 ;如果返回 0 ,表示相等;返回负整数,表示 o1 小于 o2 。 - 要实现定制排序,需要将实现 Comparator 接口的实例作为形参传递给 TreeSet 的构造器。 - 使用定制排序判断两个元素相等的标准是:通过 Comparator 比较两个元素返回了 0 。 - 示例: ``` package com.github.set.demo6; /** * @author maxiaoke.com * @version 1.0 * */ public class Person { private String name; private int age; public Person() {} public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + this.name + '\'' + ", age='" + this.age + '\'' + '}'; } } ``` ``` package com.github.set.demo6; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; /** * @author maxiaoke.com * @version 1.0 * */ public class Test { public static void main(String[] args) { Set<Person> set = new TreeSet<>(new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return Integer.compare(o2.getAge(), o1.getAge()); } }); set.add(new Person("张三", 15)); set.add(new Person("李四", 99)); set.add(new Person("王五", 58)); set.add(new Person("赵六", 9)); set.add(new Person("田七", 1)); set.add(new Person("王八", 44)); // set = [Person{name='李四', age='99'}, Person{name='王五', age='58'}, Person{name='王八', age='44'}, Person{name='张三', age='15'}, Person{name='赵六', age='9'}, Person{name='田七', age='1'}] System.out.println("set = " + set); } } ```
上一篇:
5.2 Set 的实现类:HashSet
下一篇:
第六章:Collections 工具类
该分类下的相关小册推荐:
SpringBoot零基础到实战
Mybatis合辑5-注解、扩展、SQL构建
Mybatis合辑4-Mybatis缓存机制
Java语言基础5-面向对象初级
Java面试指南
Java语言基础6-面向对象高级
Java语言基础11-Java中的泛型
经典设计模式Java版
java源码学习笔记
Java语言基础14-枚举和注解
手把手带你学习SpringBoot-零基础到实战
SpringBoot合辑-高级篇