Java语言高分悬赏:在排序算法中,如果比较的是对象不是数字或者字符串,程序怎么实现呢
Java 的 Collections 集合工具中的排序方法会根据对象的 Comparator 接口进行排序的,字符串的比较操是基于字典顺序的:
List<String> list = new ArrayList<String>();
list.add("a");
list.add("A11");
list.add("c");
list.add("F");
list.add("111");
System.out.println(list);
Collections.sort(list);
System.out.println(list);
自己写一个比较方法不行了吗。你发代码出来说说你想怎么比较。
我们可能会比较一个对象,java中万物皆对象,比如定义一个学生类,然后按照其中某一属性进行比较,当然还有其他。依据这个给出以下代码:
1、首先定义一个学生类,包括姓名和年龄
public class Student {
public Student(Integer age, String name) {
this.age = age;
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
/**
* 年龄
*/
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 姓名
*/
private String name;
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
2、按照学生中的属性比如年龄实现排序
/**
* 按照某一个属性排名降序
* @param studentList 学生列表
*/
public static void studentLengthCompareDesc(List<Student> studentList){
Collections.sort(studentList,Comparator.comparingInt(Student::getAge).reversed());
}
/**
* 按照某一个属性排名升序
* @param studentList 学生列表
*/
public static void studentCompareAsc(List<Student>studentList){
Collections.sort(studentList, Comparator.comparingInt(Student::getAge));
}
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student(12,"a1"));
students.add(new Student(14,"a2"));
System.out.println("年龄升序:");
studentCompareAsc(students);
students.forEach(System.out::println);
System.out.println("年龄降序:");
studentLengthCompareDesc(students);
students.forEach(System.out::println);
}
3、测试结果
年龄升序:
Student{age=12, name='a1'}
Student{age=14, name='a2'}
年龄降序:
Student{age=14, name='a2'}
Student{age=12, name='a1'}
Process finished with exit code 0
ps:大佬,分币吧
Java里面有一个Comparable接口专门用于比较对象,我这里定义了一个学生类实现Comparable接口,通过重写compareTo()方法对学生的成绩进行比较,这里也可以比较其他属性年龄、学号之类,不过我没有定义,也可以对多个学生进行比较public int compareTo(Student otherStudent,Student ...),我这里这简单对两个学生比较。
public class Student implements Comparable<Student> {
private String name;// 姓名
private String courseName;// 课程名
private double score;// 成绩
public Student() {
super();
}
public Student(String name, String courseName, double score) {
super();
this.name = name;
this.courseName = courseName;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name + "\t" + this.courseName + "\t" + this.score;
}
@Override
// 将一个同学与另一个同学进行比较
public int compareTo(Student otherStudent) {
// TODO Auto-generated method stub
// 在compareTo()方法,用返回值来决定排序
// 先定义一个result来判断比较的结果
int result = 0;
// 判断是否是同一个同学
result = this.name.compareTo(otherStudent.getName());
if (result == 0) {
// 比较两个人的成绩(也可以比较其他属性年龄、学号之类),这里定义了成绩就比较成绩
if (this.score == otherStudent.getScore()) {
result = 0; // 成绩相等
} else if (this.score < otherStudent.getScore()) {
result = 1; // 第一人成绩更优
} else {
result = -1;
}
}
return result;
}
}
这里实例化连个学生张三和李四,对他们的成绩进行比较
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s1 =new Student("张三","java",80.0);
Student s2 =new Student("李四","python",90.0);
if(s1.compareTo(s2)==0) {
System.err.println("成绩相等");
}else if (s1.compareTo(s2)==1) {
System.out.println(s1.getName()+"成绩优于"+s2.getName());
}else {
System.out.println(s2.getName()+"成绩优于"+s1.getName());
}
}
}
希望我的代码能对你有点帮助!
https://blog.csdn.net/qq_37937537/article/details/80445731 Java中对对象进行排序 简单明了