compare() 排序方法问题

compare() 排序方法问题

String name1=o1.getName();

String name2=o2.getName();

int n=name1.compareTo(name2);

 我就搞不懂了,name1的ASCII码大于name2就是升序排序,那谁知道传入name1的name2谁大谁小啊。

1、

Cat huahua=new Cat("huahua",5,"英国短毛猫");

Cat maomao=new Cat("maomao",3,"中华田园猫");

Cat fanfan=new Cat("fanfan",2,"中华田园猫");

这种编写顺序 h的ASCII码是小于m的 为什么也是升序?

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

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

3回答
大喵爱梳子 2018-09-22 01:33:58

我尝试了一下如果在 name1.compareTo(name2)的时候,即使输入的是c,b,a, 也依旧是升序排列。

在 name2.compareTo(name1)的时候,输入是 a,b,c,也是降序成 c,b,a,所以可能是comparator默认 name1 比name2 大

irista23 2018-09-07 18:36:28

compareTo()方法返回负整数、零或正整数。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。例如n返回1,Collections.sort(List)方法就是升序;n返回-1,Collections.sort(List)方法就是降序。

  • 提问者 松柏i #1
    请问如何知道name1传入的是huahua,fanfan,还是maomao? name2传入的是huahua,fanfan,还是maomao,?如果是按照 catList.add(fanfan); catList.add(huahua)这个代码执行的顺序,那好name1是fanfan,name2是huahua,f小于m,返回一个负数,降序排列,那么为什么我执行代码后还是升序排列?
    2018-09-07 21:05:03
  • irista23 回复 提问者 松柏i #2
    ArrayList是一个动态数组,sort()方法会自动将集合元素依次去取出来进行比较。这也是sort()方法的规则,你可以通过查看该方法源码了解原理。
    2018-09-09 10:05:36
chrismorgen 2018-09-07 18:33:20

你好~compareTo方法是按字典序比较大小,m按顺序排在h的后面的,所以huahua排在maomao前面。祝学习愉快~

  • 提问者 松柏i #1
    你说的对,至少你回答到点上了,但是你还是没有解决我的疑问,那好(huahua)compareTo(maomao),h<m,是返回一个负数吧,那不应该是降序吗
    2018-09-07 20:41:28
  • irista23 回复 提问者 松柏i #2
    具体是升序还是降序是Collections.sort()方法的规则。CompareTo()只是提供比较的依据,例子中方法默认就是升序的写法,如果要降序就把CompareTo比较的两边反过来就可以。
    2018-09-09 10:02:36
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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