TreeSet的俩种排序方法
来源:互联网 发布:什么学英文软件 编辑:程序博客网 时间:2024/06/18 17:23
TreeSet的俩种排序方法
分为自然排序和比较器排序
用TreeSet集合存储自定义对象,自定义的队形一定要实现Comparable接口(自然排序),还要在自定义对象的类中重写compareTo方法;Comparator接口(比较器排序)。
自然排序:
TreeSet<Sdudent> ts = new TreeSet<Sdudent>();
比较器排序:
1,TreeSet<Sdudent> ts = new Tree<Sdudent>(new MyComparator()); MyComparator:为Comparator的子实现类,且需要重写compare方法。 2.(比较常用)匿名内部类的方法 TreeSet<Sdudent> ts = new TreeSet<> (new Comparartor<Sdudent>(){ 重写compare方法; });
需求:
使用TreeSet集合存储自定义对象,并遍历,要求按照姓名的长度进行排序(主要条件)(自然排序)
代码:
public static void main(String[] args) { Sdudent s1 = new Sdudent("safsgdfsadf",20); Sdudent s2 = new Sdudent("dsgeacx",45); Sdudent s3 = new Sdudent("fdbgxccbvcb",34); Sdudent s4 = new Sdudent("adgfvdhbgftb",67); Sdudent s5 = new Sdudent("dvfergcxcbf",20); Sdudent s6 = new Sdudent("sdfwegfdfcdvszfdvgfd",56); Sdudent s7 = new Sdudent("asdfregvrtbcfb",76); TreeSet<Sdudent> ts= new TreeSet<Sdudent>(); ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); ts.add(s6); ts.add(s7); for(Sdudent s :ts){ System.out.println(s.getName()+"\t"+s.getAge()+"\t"); }}
Sdudent类:
public class Sdudent implements Comparable<Sdudent>{ private String name; private int age; public Sdudent(){ } public Sdudent(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;}@Overridepublic int compareTo(Sdudent s) { int num = this.name.length()-s.name.length(); int num2 =num ==0? this.name.compareTo(s.name):num; int num3 =num2==0? this.age-s.age :num2; return num3;}
结果:
dsgeacx 45
dvfergcxcbf 20
fdbgxccbvcb 34
safsgdfsadf 20
adgfvdhbgftb 67
asdfregvrtbcfb 76
sdfwegfdfcdvszfdvgfd 56
需求:
键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台(选择排序)
代码:
public static void main(String[] args) { //创建集合对象 用TreeSet集合 TreeSet<Sdudent2> ts=new TreeSet<>(new Comparator<Sdudent2>(){ @Override public int compare(Sdudent2 o1, Sdudent2 o2) { int num = o1.getChinese()+o1.getMath()+o1.getEnglish()- o2.getChinese()-o2.getEnglish()-o2.getMath(); int num2 =num ==0? o1.getChinese()-o2.getChinese():num; int num3 =num2 ==0? o1.getMath()-o2.getMath():num2; int num4 =num3 ==0? o1.getEnglish()-o2.getEnglish():num3; int num5 = num4 ==0? o1.getName().compareTo(o2.getName()):num4; return num5; } }); //键盘输入 for(int x = 1 ;x<=5;x++){ Scanner sc = new Scanner(System.in); System.out.println("请输入第"+x+"位学生的信息"); System.out.println("请输入姓名"); String s = sc.nextLine(); System.out.println("请输入语文成绩"); int yw = sc.nextInt(); System.out.println("请输入数学成绩"); int sx = sc.nextInt(); System.out.println("请输入英语成绩"); int yy = sc.nextInt(); //创建学生对象 Sdudent2 ss = new Sdudent2(s,yw,sx,yy); //添加 ts.add(ss); } System.out.println("姓名\t语文成绩\t数学成绩\t英语成绩\t"); for(Sdudent2 s :ts){ System.out.println(s.getName()+"\t"+s.getChinese()+"\t"+s.getMath() +"\t"+s.getEnglish()+"\t"); } }
结果:
请输入第1位学生的信息
请输入姓名
张三
请输入语文成绩
77
请输入数学成绩
78
请输入英语成绩
67
请输入第2位学生的信息
请输入姓名
李四
请输入语文成绩
88
请输入数学成绩
83
请输入英语成绩
74
请输入第3位学生的信息
请输入姓名
王五
请输入语文成绩
90
请输入数学成绩
91
请输入英语成绩
67
请输入第4位学生的信息
请输入姓名
赵宇豪
请输入语文成绩
89
请输入数学成绩
88
请输入英语成绩
95
请输入第5位学生的信息
请输入姓名
杨虹
请输入语文成绩
87
请输入数学成绩
99
请输入英语成绩
97
姓名 语文成绩 数学成绩 英语成绩
张三 77 78 67
李四 88 83 74
王五 90 91 67
赵宇豪 89 88 95
杨虹 87 99 97
- TreeSet的俩种排序方法
- Treeset的两种排序方法
- Treeset的两种排序方法
- TreeSet的两种排序方法
- Treeset的两种排序方法
- Treeset的两种排序方法
- Java容器Treeset的两种排序方法
- TreeSet中自定义排序的两种方法
- TreeSet中的两种排序方法
- TreeSet的第二种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet集合的两种排序
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的排序
- 采购订单打印
- leetcode--Find Peak Element
- 详解初始化列表
- Spring IOC创建对象的三种方式
- 自己对闭包的一些小理解
- TreeSet的俩种排序方法
- 项目割接方案汇报流程
- 关于正则引擎ε-NFA -> NFA (仅通过边建立限制结束状态的两种尝试
- 明明的随机数
- 在Ubuntu中通过update-alternatives切换软件版本
- JS学习-iterable
- 序列化与反序列化
- linux虚拟文件系统
- leetcode--Fraction to Recurring Decimal