Java根据学生年龄对学生对象排序
- 方法一
1.写出实体Student类
package com.jingfei;
public class Student implements Comparable{
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 Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Object o) {
//对引用数据类型排序,必须实现Comparable接口中的此方法.
Student student=(Student) o;
int num=this.getAge()-student.getAge();//年龄相同之后再比较姓名
int num1=num==0?this.getName().compareTo(student.getName()):num;
return num1;
}
}
2.写出测试类,实例化Student
用TreeSet对引用数据类型排序,要求集合中元素必须实现Comparable接口,重写CompareTo()方法。TreeSet可以去重。
package com.jingfei;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
Student student=new Student("张三",23);
Student student1=new Student("李四",24);
Student student2=new Student("王五",25);
Student student3=new Student("赵六",26);
Student student4=new Student("赵六1",26);
TreeSet<Student> students = new TreeSet<>();
students.add(student);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student3);
students.add(student4);
for (Student s : students) {
System.out.println(s.getName()+"=="+s.getAge());
}
}
}
- 方法二
Student类不用实现Comparable接口.
改用Comparator比较器
package com.jingfei.demo;
public class Student {
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 Student(String name, int age) {
this.name = name;
this.age = age;
}
}
给TreeSet传一个比较器
package com.jingfei.demo;
import java.util.Comparator;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
Student student=new Student("张三",23);
Student student1=new Student("李四",24);
Student student2=new Student("王五",25);
Student student3=new Student("赵六",26);
Student student4=new Student("赵六1",26);
//匿名内部类传比较器
TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
//TreeSet可去重,并且年龄一样比较姓名,只有年龄和姓名都一样才为一个人。
int num=s1.getAge()-s2.getAge();
int num1=num==0?s1.getName().compareTo(s2.getName()):num;
return num1;
}
});
students.add(student);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student3);
students.add(student4);
for (Student s : students) {
System.out.println(s.getName()+"=="+s.getAge());
}
}
}
- 方法三
用ArrayList中的Sort方法,此方法可以传一个比较器
package com.jingfei.demo1;
public class Student {
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 Student(String name, int age) {
this.name = name;
this.age = age;
}
}
ArrayList中Sort方法传一个比较器,可以进行排序,但是这种排序不能去重
package com.jingfei.demo1;
import com.jingfei.demo.Student;
import java.util.ArrayList;
import java.util.Comparator;
public class Test {
public static void main(String[] args) {
Student student = new Student("张三", 23);
Student student1 = new Student("李四", 24);
Student student2 = new Student("王五", 25);
Student student3 = new Student("赵六", 26);
Student student4 = new Student("赵六1", 26);
ArrayList<Student> list = new ArrayList<>();
list.add(student);
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student3);
list.add(student4);
list.sort(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num = o1.getAge() - o2.getAge();
int num1 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
return num1;
}
});
for (Student s : list) {
System.out.println(s.getName() + "==" + s.getAge());
}
}
}
- 方法四
数组工具类的Sort方法也可以传一个比较器
package com.jingfei.demo2;
public class Student {
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 Student(String name, int age) {
this.name = name;
this.age = age;
}
}
给数组排序,不能去重
package com.jingfei.demo2;
import java.util.Arrays;
import java.util.Comparator;
public class Test {
public static void main(String[] args) {
Student student = new Student("张三", 23);
Student student1 = new Student("李四", 24);
Student student2 = new Student("王五", 25);
Student student3 = new Student("赵六", 26);
Student student4 = new Student("赵六1", 26);
Student[] students = new Student[]{student, student1, student2, student3, student3, student4};
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num = s1.getAge() - s2.getAge();
int num1 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
return num1;
}
});
for (Student s : students) {
System.out.println(s.getName() + "==" + s.getAge());
}
}
}
谢谢