问答详情
源自:6-8 学生选课--- 实现学生序列排序

我想了解一下排序优先度的问题

如图,老师在第79行按照id进行了排序,最终结果符合预期。然后,老师在第84行按照name进行了排序,结果也符合预期。但我不理解的是,之前已经用Collections.sort(studentList)按照id进行了排序,为什么后来用Collections.sort(studentList, new StudentComparator())按照name进行排序就不再考虑之前id的顺序,最终输出的结果只按照name进行排序。

我想知道Collections.sort(studentList, new StudentComparator())中的studentList究竟有何

http://img4.mukewang.com/5e7a087c0001a5ed15020520.jpg

http://img4.mukewang.com/5e7a087c0001035409820535.jpg

用处,它之前的排序为何被忽视了,是因为Comparator接口排序的优先度大于Cpmparable接口吗?

希望大家多多指教,谢谢!

提问者:慕丝1322028 2020-03-24 21:17

个回答

  • 远赴山河万里
    2020-03-24 23:21:30
    已采纳

    comparator是临时的,compareable从默认的,也就是说,当你sort(studentList),这个时候因为没有给一个临时的comparator,compareable的意思是,当没有其他的规则时,按照默认的排序。

    原理和初始化类似,初始化一个对象时,如果你不给参数,他就会按照默认的,给了就覆盖掉。

  • 远赴山河万里
    2020-03-24 23:38:56

    还有,不用纠结这些,第一遍学的时候建议了解整个框架即可,这些可以后来回过头来再看即可

  • 远赴山河万里
    2020-03-24 23:35:44

    1 排序规则实现的方法不同

    Comparable接口的方法:compareTo(Object o)

    Comparator接口的方法:compare(T o1, To2)

    2 类设计前后不同

    Comparable接口用于在类的设计中使用;设计初期,就实现这个借口,指定排序方式。

    Comparator接口用于类设计已经完成,还想排序(Arrays)。