概述
在集合框架与数组中sort()这个方法非常好用,对我之前的我来说也只是用,今天研究了一下,发现了好多好多东西,与您分享:
- Collections.sort()与Arrays.sort()的关系:Collections.sort()底层是由Arrays.sort()来实现的。有图有真相:
- 关于sort()是如何排序的?
不知道大家遇到是不是遇到这种问题才来查的,我们使用sort()方法进行排序对于默认定义的数据类型可以实现,而且有他一定的规律,但是自定义类型会出错。
他的原因就是人家之所以能排序是实现了Comparable接口中的compareTo(T o)方法,通过返回只进行排序,当返回值等于1时会发生交换。也就是说如果我们要使用sort()方法排序,必须实现Comparable接口中的compareTo()方法。但除此之外
我们还有一种相对更灵活的方式,那就是定义一个类去实现Comparator中的compare(T o1,T o2)。话不多说上代码。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Comparable和Comparator的区别 {
public static void main(String[] args) {
//测试Comparable方法
List<Person> list = new ArrayList<Person>();
list.add(new Person(1006,"jason",59));
list.add(new Person(1020,"meihao",32));
list.add(new Person(1001,"xiaolei",20));
list.add(new Person(1012,"edision",16));
list.add(new Person(1002,"wangyong",29));
System.out.println("排序前:....");
printList(list);
//通过Collections.sort方法来对List进行排序,是按照List里面的对象(Person)
//实现的Comparable接口的规则来排序的
Collections.sort(list);
System.out.println("####################");
System.out.println("默认的Name排序规则,排序后:....");
printList(list);
//通过NumberComparator定义的规则排序
Collections.sort(list,new NumberComparator());
System.out.println("####################");
System.out.println("Number排序规则,排序后:....");
printList(list);
//通过NumberComparator定义的规则排序
Collections.sort(list,new AgeComparator());
System.out.println("####################");
System.out.println("Age排序规则,排序后:....");
printList(list);
}
private static void printList(List<Person> list){
for(Person p:list){
System.out.println(p);
}
}
}
class Person implements Comparable<Person> {
public String name;
public int age;
public int number;
public Person(){}
public Person(int num,String name,int age){
this.number = num;
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person o) {
return this.name.compareTo(o.name);
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", number=" + number
+ "]";
}
}
class NumberComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.number - o2.number;
}
}
class AgeComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
}
————————————————
此代码来自链接:[有点懒就借用了]https://blog.csdn.net/hust_hacker_art/article/details/52294261
最后
以上就是勤恳柜子为你收集整理的划重点:自定义类型数组/集合利用sort排序的全部内容,希望文章能够帮你解决划重点:自定义类型数组/集合利用sort排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复