Java中Array.sort()的排序原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中Array.sort()的排序原理相关的知识,希望对你有一定的参考价值。

People[] people=
new People("小飞飞","2","2:41:28"),
new People("小国","2","11:1:32"),
new People("小威","4","17:23:3"),
new People("大飞","2","14:52:13"),
new People("晶晶","1","2:18:25"),
new People("死佳","2","4:13:15"),
new People("旭旭","2","4:48:39"),
new People("阿雪","1","3:34:13"),
new People("小强","1","2:53:47") ;
Arrays.sort(people);
为什么它会用第二个字符串排序呢,sort的底层排序是什么原理啊!求各位大虾指点!在线等。。。。。。。
我的People类
class People implements Comparable<People>
String name;
String times;
String time;
public People(String name,String times,String time)
this.name=name;
this.times=times;
this.time=time;


public int compareTo(People p1)
int countc=times.compareTo(p1.times);
int countt=p1.time.compareTo(p1.time);
return countc!=0?countc:countt;


public String toString()
return name+" "+times+" "+time;



一楼说的优先级问题,但我的都是字符串啊,问什么它他按第一个字符串的字典顺序排呢,第二个字符串难道会在Java内部自动转换成字符串,然后在按优先级排序吗,还是不太懂,大虾在指点一下

这要看你的People类中的int compareTo(T o)方法是怎么定义的了,
要想使用sort(),数组中的所有元素都必须实现 Comparable 接口
我想你的People类中应该有这个方法

sort()方法是按对象的自然顺序排序,也就是int compareTo(T o)方法定义的顺序.
看看java.lang.Comparable接口

public int compareTo(People p1)//String类实现了Comparable接中,表示按字典顺序排序
int countc=times.compareTo(p1.times);//this.times>p1.times返回1,<返回-1,=返回0
int countt=p1.time.compareTo(p1.time);//这里永远等于0了,p1.是不是要去掉啊
return countc!=0?countc:countt;//当countc!=0,返回countc,否则返回countt

个人理解:当返回1时,系统认为当前对象比p1大,放到p1后边,
当返回-1时,系统认为当前对象比p1小,放到p1前边,
当返回0是,系统认为当前对象等于p1,顺序不变
所以:
你定义的是当times不同是,就按times从小到大排序,相同时就按原来顺序排序.
参考技术A 首先compareTo方法有问题,第二行我想应该是
int countt=time.compareTo(p1.time);
否则p1.time和p1.time怎么比都是一样的,返回0。
这个比较逻辑就是,如果两个People的times不相等,就按times的顺序来,如果相等,就按time的顺序来。
又由于times和time定义的时候都是String,所以会按照String的排序方法来比较。按照你的想法,应该times转成int,time转成date,然后再比较,应该就没问题了。
参考技术B sort的底层排序原理,我用自己的经验说说,不一定是你需要的,
它是对Object数组进行排序,优先级别是int,String,
int属性ComparaTo方法。而String实现String。ComparTo方法。本回答被提问者采纳
参考技术C 你看java 的api 文档啊:

sort
public static void sort(Object[] a)根据元素的自然顺序,对指定对象数组按升序进行排序。

以上是关于Java中Array.sort()的排序原理的主要内容,如果未能解决你的问题,请参考以下文章

Java在java下Array.Sort和(自己写的)快速排序到底那个快?

更高效地刷OJ——Java中常用的排序方法,Array.sort(),Arrays.parallelSort(), Collections.sort()

JAVA Array.sort时间排序问题

java数组排序问题:array.sort()是从小到大排序,那么如何从大到小排序?

Array.Sort 谷歌内核 数组大小超过10 排序字段都一致 返回的数组非原数组

java(Array.sort())原理