TreeSet的两种排序方式
来源:互联网 发布:景安备案域名购买 编辑:程序博客网 时间:2024/06/11 23:07
一、
TreeSet可以实现对元素按照一定规则排序
如下代码:
import java.util.TreeSet;public class TreeSetTest { public static void main(String[] args) { TreeSet<Integer> set=new TreeSet<Integer>(); set.add(1); set.add(9); set.add(8); set.add(-5); set.add(10); set.add(2); set.forEach(System.out::println); }}
执行结果:
-5128910
实现排序,升序排序。
那对于自定义的对象呢?
如下代码:
import java.util.TreeSet;public class TreeSetTest { public static void main(String[] args) { TreeSet<User> set=new TreeSet<User>(); set.add(new User("aaa", 15)); set.add(new User("bbb", 19)); set.add(new User("ccc", 7)); set.add(new User("ddd", 18)); set.forEach(System.out::println); }}class User{ private String name; private int 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; } public User(String name, int age) { super(); this.name = name; this.age = age; } public User() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; }}
运行报错:
Exception in thread "main" java.lang.ClassCastException: test.User cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(TreeMap.java:1290) at java.util.TreeMap.put(TreeMap.java:538) at java.util.TreeSet.add(TreeSet.java:255) at test.TreeSetTest.main(TreeSetTest.java:9)
由于不知道按照什么方式排序,所以报错了
实现排序的两种方式:
1、自然排序
2、比较器排序
二、自然排序
具体两个步骤:
1、User类实现Comparable接口
2、重写compareTo()方法,返回0,相等,返回正,此对象大于另一个对象,返回负,此对象小于另一个对象。结果升序排序
代码如下:
package test;import java.util.TreeSet;public class TreeSetTest { public static void main(String[] args) { TreeSet<User> set=new TreeSet<User>(); set.add(new User("aaa", 15)); set.add(new User("bbb", 19)); set.add(new User("ccc", 7)); set.add(new User("ddd", 18)); set.forEach(System.out::println); }}class User implements Comparable<User>{ private String name; private int 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; } public User(String name, int age) { super(); this.name = name; this.age = age; } public User() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(User o) { //根据年龄排序 return this.age>o.age?1:-1; }}
结果:
User [name=ccc, age=7]User [name=aaa, age=15]User [name=ddd, age=18]User [name=bbb, age=19]
实现了排序
三、比较器排序
两个步骤:
1、定义一个比较器类,实现Comparator接口,重写compare接口
2、使用下面的构造器new TreeSet
TreeSet(Comparator
import java.util.Comparator;import java.util.TreeSet;public class TreeSetTest { public static void main(String[] args) { TreeSet<User> set=new TreeSet<User>(new UserCompare()); set.add(new User("aaa", 15)); set.add(new User("bbb", 19)); set.add(new User("ccc", 7)); set.add(new User("ddd", 18)); set.forEach(System.out::println); }}class User{ private String name; private int 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; } public User(String name, int age) { super(); this.name = name; this.age = age; } public User() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; }}class UserCompare implements Comparator<User>{ @Override public int compare(User o1, User o2) { // TODO Auto-generated method stub return o1.getAge()>o2.getAge()?1:-1; }}
结果:
User [name=ccc, age=7]User [name=aaa, age=15]User [name=ddd, age=18]User [name=bbb, age=19]
实现了排序
List默认是不排序的,也可以通过这两种排序方式实现排序。
1、自然排序
实现Comparable接口
重写compareTo()方法,返回0,相等,返回正,此对象大于另一个对象,返回负,此对象小于另一个对象。结果升序排序
Collections.sort(list)
2、比较器排序
、定义一个比较器类,实现Comparator接口,重写compare接口
Collections.sort(list,comparator)
阅读全文
1 0
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- 黑马程序员 TreeSet排序的两种实现方式
- java集合TreeSet的两种排序方式
- TreeSet对元素进行排序实现的两种方式
- TreeSet的排序两种实现方式Comparator和Comparable
- TreeSet排序方式(两种)
- TreeSet集合两种排序方式
- 实现TreeSet定制排序两种方式
- TreeSet的两种排序方式:自然排序和定制排序
- Treeset的两种排序方法
- Treeset的两种排序方法
- TreeSet的两种排序方法
- Treeset的两种排序方法
- Mac使用mysql中出现ERROR 1045: Access denied for user: 'root@localhost' 以及密码过期解决方法
- VIM完全使用教程
- Android的Drawable
- js实现表格的添加 删除 搜索和排序
- 区间dp—整数划分
- TreeSet的两种排序方式
- CSDN 学院 大数据和人工智能 第一课
- Java面向对象思想
- 原理总结-mybatis
- 牛客网-游戏任务标记
- 异常 知识点记忆
- 各位相加
- 过山车
- linux系统开机自启动:init upstart systemd