再JAVA中如何使用qsort对类进行排序?
目录
结论:
import java.util.Arrays;class Person implements Comparable{ public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Person o) { return this.age - o.age; }}public class Main{ public static void main(String args[]){ Person[] arr = new Person[3]; arr[0] = new Person("zhang", 10); arr[1] = new Person("wang", 13); arr[2] = new Person("li", 11); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); }}
解析:
我们知道当我们定义了一个整型数组然后想对其进行排序时就可以使用 Arrays.toString() 方法对数组进行排序,系统会默认将其按照升序排列。
public static void main(String args[]){ int[] arr = {2,6,3,0,5,2}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); }
当我们需要对类进行排序应该怎么做呢?
首先我们先定义一个类:
class Person{ public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }}
我们现在有了这个类之后就可以对他进行排序了,此时我们可以先尝试直接对类进行排序操作:
public static void main(String args[]){ Person[] arr = new Person[3]; arr[0] = new Person("zhang", 10); arr[1] = new Person("wang", 13); arr[2] = new Person("li", 11); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); }
虽然报错了但是我们从报错信息中可以找到这一块代码:
从中我们可以清晰的看到它将我们的代排序类强制类型转换成了 Comparable 而我们的类根本就不能进行强制类型转换成Comparable从而引起了错误。
我们既然已经知道了哪里出现了错误那么改掉之后我们就可以实现使用 Arrays.toString() 方法来排序类。
此时我们先修改我们的类,使其实现 Comparable 接口:
紧接着再类中对 compareTo() 方法进行重写。(假如我们用年龄来排序 compareTo() 方法的返回值为:大于返回大于0的数;小于返回小于零的数;等于返回0)
class Person implements Comparable{ public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Person o) { return this.age - o.age; }}
运行之后可以看到结果按照年龄升序排序。
来源地址:https://blog.csdn.net/2302_76339343/article/details/132429661
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341