TreeSet集合的两种排序
来源:互联网 发布:云计算的运用 编辑:程序博客网 时间:2024/06/03 14:14
TreeSet集合的两种排序
自然排序
比较器排序
本身就可以实现自然排序和比较器排序,都是通过构造方法进行实现:
1.自然排序:TreeSet() :创建该集合对象:通过无参构造的形式:默认的就是自然排序
需要在当前的类中实现Comparable接口:
实现该接口中的compareTo()方法
代码:
package 两种排序;
//自然排序
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
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;
}
public int compareTo(Student s) {
//主要条件:姓名的长度是否相同
int num=this.name.length()-s.name.length();
//次要条件,年龄是否相同
int num2=num==0?this.age-s.age:num;
//比较姓名的内容是否相同
int num3=num2==0?this.name.compareTo(s.name):num2;
return num3;
}
}
//测试类
package 两种排序;
import java.util.TreeSet;
public class TreeSetTest1 {
public static void main(String[] args) {
//创建TreeSet集合对象
TreeSet<Student> ts=new TreeSet<Student>();
//创建Student对象
Student s1=new Student("习近平",60);
Student s2=new Student("奥巴马",66);
Student s3=new Student("文在寅",60);
Student s4=new Student("奥巴马",55);
Student s5=new Student("特里莎梅",63);
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());
}
}
}
2.比较器排序:
TreeSet(Comparator<T> comparator):里面参数是一个接口的形式
两种方式:
1)自定义一个类实现Comparator接口,实现接口中的compare()方法
2)匿名内部类的方式:实际开发中使用
比如:
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
//主要条件:按照姓名的长度进行
/**
* 回想自然排序里面comparTo(Student s)
* this.name.length----->s1
* s.name.length------>s2
*
* */
int num = s1.getName().length() - s2.getName().length() ;
//次要条件:姓名的长度相同,不一定年龄相同
int num2 = num==0? s1.getAge()-s2.getAge() : num ;
//姓名长度一样,年龄一样,不一定姓名的内容一样
int num3 = num2==0? s1.getName().compareTo(s2.getName()) : num2 ;
return num3;
}
});
代码:
package 两种排序;
import java.util.TreeSet;
//比较器排序
public class TreeSetTest1 {
public static void main(String[] args) {
//创建TreeSet集合对象
TreeSet<Student> ts=new TreeSet<Student>();
//创建Student对象
Student s1=new Student("习近平",60);
Student s2=new Student("奥巴马",66);
Student s3=new Student("文在寅",60);
Student s4=new Student("奥巴马",55);
Student s5=new Student("特里莎梅",63);
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());
}
}
}
//测试类
package 两种排序;
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetTest2 {
public static void main(String[] args) {
//创建TreeSet集合对象,匿名内部类
TreeSet<Student2> ts=new TreeSet<Student2>(new Comparator<Student2>(){
@Override
public int compare(Student2 s1, Student2 s2) {
// TODO Auto-generated method stub
//主要条件:比较名字的年龄是否相同
int num=s1.getAge()-s2.getAge();
//次要条件,年龄相同再比较名字的内容是否相同
int num2=num==0?s2.getName().compareTo(s1.getName()):num;
return num2;
}
});
//创建Student对象
Student2 s1=new Student2("习近平",60);
Student2 s2=new Student2("奥巴马",66);
Student2 s3=new Student2("文在寅",60);
Student2 s4=new Student2("奥巴马",55);
Student2 s5=new Student2("特里莎梅",63);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
//遍历
for(Student2 s:ts){
System.out.println(s.getName()+","+s.getAge());
}
}
}
3.练习
键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低
输出到控制台
分析:1)创建TreeSet集合对象
2)如何实现总分从高到低?
3)存储5个学生到集合中:for循环存储
4)遍历集合中的元素信息
代码:
package 两种排序;
public class Student3 {
private String name;
private int chinese;
private int math;
private int english;
public Student3() {
super();
// TODO Auto-generated constructor stub
}
public Student3(String name, int chinese, int math, int english) {
super();
this.name = name;
this.chinese = chinese;
this.math = math;
this.english = english;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChinese() {
return chinese;
}
public void setChinese(int chinese) {
this.chinese = chinese;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public int getSum(){
return this.chinese +this.math+this.english;
}
}
//测试类
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
public class TreeSetTest3 {
public static void main(String[] args) {
//创建TreeSet集合对象
TreeSet<Student3> ts=new TreeSet<Student3>(new Comparator<Student3>(){
@Override
public int compare(Student3 s1, Student3 s2) {
// TODO Auto-generated method stub
//成绩总分从高到低排序
int num=s2.getSum()-s1.getSum();
//总分一样,语文成绩不一样
int num2=num==0?s2.getChinese()-s1.getChinese():num;
//总分一样,语文成绩一样,数学成绩不一样
int num3=num2==0?s2.getMath()-s1.getMath():num2;
//总分一样,语数外一样,名字不一样
int num4=num3==0?s2.getName().compareTo(s1.getName()):num3;
return num4;
}
});
//键盘录入5个学生的信息,为了方便:键盘录入的每一个数据:都是String类型
System.out.println("录入学习信息开始:");
for(int x = 1 ; x <=5 ; x ++){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
System.out.println("请输入第:"+x+"个学生的姓名:");
String name = sc.nextLine() ;
System.out.println("请输入第:"+x+"个学生的语文成绩:");
String chineseString = sc.nextLine() ;
System.out.println("请输入第:"+x+"个学生的数学成绩:");
String mathString =sc.nextLine() ;
System.out.println("请输入第:"+x+"个学生的英语成绩:");
String englishString = sc.nextLine();
//将这些学生信息封装到学生对象中
Student3 s = new Student3() ;
s.setName(name) ;
s.setChinese(Integer.parseInt(chineseString)) ;
s.setMath(Integer.parseInt(mathString)) ;
s.setEnglish(Integer.parseInt(englishString)) ;
//将学生对象添加集合中
ts.add(s) ;
}
System.out.println("录入学生信息完毕,信息如下:");
System.out.println("姓名\t语文成绩\t数学成绩\t英语成绩:");
//遍历:
for(Student3 s:ts){
System.out.println(s.getName()+"\t"+s.getChinese()+"\t"+
s.getMath()+"\t"+s.getEnglish());
}
}
}
比较器排序
阅读全文
0 0
- TreeSet集合的两种排序
- java集合TreeSet的两种排序方式
- TreeSet集合两种排序方式
- Treeset的两种排序方法
- Treeset的两种排序方法
- TreeSet的两种排序方式
- TreeSet的两种排序方法
- Treeset的两种排序方法
- TreeSet的两种排序方式
- Treeset的两种排序方法
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- TreeSet的两种排序方式
- 黑马程序员对TreeSet集合中的元素排序的两种方式
- 黑马程序员训练营---------TreeSet集合中对象进行排序的两种方式
- TreeSet集合两个排序方法方法的分析&&Map集合获取的两中方式
- TreeSet集合,可排序的集合
- 嵌入式Linux驱动笔记(八)------依赖Linux kernel驱动的pwm编写
- ssh登陆Linux
- 如何在Spark2.0.2中启动Ipython Notebook
- Hbase 集群维护
- HDU 2049-不容易系列之(4)——考新郎
- TreeSet集合的两种排序
- rbtree原理及应用--使用
- ZooKeeper学习笔记:netcat命令基本用法与客户端连接zookeeper
- QGCToolbox
- codeforces 680C Bear and Prime 100(数论)
- Python之运算符以及基本数据类型的objec
- Java集合---LinkedList源码解析
- Deep Region and Multi-label Learning for Facial Action Unit Detection简要论文笔记
- hdu6127Hard challenge(思维+扫描)