关于排序问题

关于排序问题

@Override

public int compareTo(Song o) {

String name1=this.getName();

String name2=o.getName();

int n=name1.compareTo(name2);

return 0;

}

这样写是通过名字升序排列吧;

请问老师。 

String name1=this.getName();

String name2=o.getName();

先定义 name1=o.getName(); 

后定义name2=this.getName();

int n=name1.compareTo(name2); 还是升序吗?

这个先后定义name的值影响排序吗?


问题2:

public Song searchSongById(String id) {

Song song = null;

// ID是唯一的

for (Song song1 : musicList) {

if (song1.getId().equals(id)) {

// 如果相同就是找到了

song = song1;

break;

}


为什么一定要先定义 Song song 对象为null呢?

不定义直接开始循环不可以吗?

for (Song song1 : musicList) {

if (song1.getId().equals(id)) {

// 如果相同就是找到了

Sysout.out.println(song1);

break;



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕阿满 2021-02-01 11:31:40

同学你好,关于同学的问题:

1、如下写法是升序排序。

http://img1.sycdn.imooc.com//climg/601772d8093cb66003540255.jpg

2、如下是降序排序。

http://img1.sycdn.imooc.com//climg/601772ee09fc22f004360179.jpg


compareTo()方法比较的意义如下:

如果返回值小于0,说明第一个比第二个小(不交换两个的位置);

如果返回值等于0,说明第一个等于第二个(不交换两个的位置);

如果返回值大于0,说明第一个比第二个大(交换两个的位置)。


this.getName()是获取当前对象的名称,o.getName()是获取下一个要比较对象的名称。name1.compareTo(name2),这里name1是下一个要比较的对象的名称,name2是当前对象的名称。


如果返回小于0,也就是name1的值比name2的值小,不交换位置。name1是下一个要比较的对象,name2是当前对象,name1的值小于name2的值,是降序排序。


如果返回值大于0,也就是name1比name2的值大,交换name1和name2的位置,变成了 o对象在前,this的对象在后。根据前边已知name1(也就是o对象的名称),大于name2(当前对象名称),这样将变成了降序排序。


3、不定义song为null,可以直接循环。

这里定义Song song = null是最后可以通过song是否为null判断是否找到,如果没有找到,可以给出提示。如果不定义,没有找到时,不能通过song是否为nll判断。

祝学习愉快~

  • 提问者 rock221 #1
    也就是说当前对象在前,要比较的对象在后,执行升序,对吧
    2021-02-01 12:36:15
  • 好帮手慕阿满 回复 提问者 rock221 #2

    是的,同学理解的不错。祝学习愉快~

    2021-02-01 14:41:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师