new-还是 关于comparetor 的问题, 为什么返回1 就是正序,返回-1就是逆序呢?

问题描述

还是 关于comparetor 的问题, 为什么返回1 就是正序,返回-1就是逆序呢?
ArrayList list = new ArrayList();

    list.add(100);    list.add(22);    list.add(77);    list.add(44);    list.add(55);    System.out.println(list);    Collections.sort(list new Comparator<Integer>() {        @Override        public int compare(Integer num1 Integer num2) {            return  num1>num2?1:-1;        }    });    System.out.println(list);}

我们假设 num1 = 100 num2 = 22. 那么 num1>num2 返回的是1 . 然后呢? 不太明白 。 能帮忙细讲解 一下么。。一步一步的,,

解决方案

无论正序,还是逆序,你首先要排序吧。排序的过程在哪里?是 Collections.sort 实现的吗?
compare 现在只是实现,要看调用处如何调用,参数是如何传入的才能进一步分析。

解决方案二:
Collections.sort 本身实现了排序功能,compare是用来比较大小的,就是你排序时的顺序

解决方案三:

 public int compare(Integer num1 Integer num2) {            return  num1>num2?1:-1;        }

第一个参数大于第二个参数时返回1
否则(第一个参数小于或等于第二个参数时返回-1

解决方案四:
这个没有什么好解释的,这个相当于一个规定,大于0的就是指compare方法第一个参数要放在第二个参数的前面,小于0就是指第一个参数要放在第二个参数后面

解决方案五:
非要追问为什么的话,其实是历史原因,曾经有几个C函数,他们就是这样区分大小的:
int strcmp(const char *s1 const char *s2);
int memcmp(const void *s1 const void *s2 size_t n);

解决方案六:
Comparator的是根据二叉树进行排序,并且是根据中序进行遍历的。
num1>num2?1:-1; 这个是三元运算符(具体可以了解下Java基础),如果num1 > num2 则返回1,那么num1是右节点,num2是左节点,中序遍历后,那么compartor就是是按照num从小到大的顺序排列;
反之,num1>num2?-1:1则是如何num1 > num2 则返回-1,num1是左节点,num2是右节点,中序遍历后,那么compartor就是是按照num从大到小的顺序排列;

时间: 2024-09-13 11:05:49

new-还是 关于comparetor 的问题, 为什么返回1 就是正序,返回-1就是逆序呢?的相关文章

引用返回值 引用形参-在C++中,很简单的引用返回值函数,可以返回两个引用的相加和吗

问题描述 在C++中,很简单的引用返回值函数,可以返回两个引用的相加和吗 #include using namespace std; void main() { int& sum(int &a,int& b); int a=1,b=2; sum(a,b)+=1; } int &sum(int & a,int & b) { return a+b; } 在VC6.0中编译出错error C2440: 'return' : cannot convert from

android-谁有phoneGap的实例代码,点击返回按钮后,只是返回上一个页面,而不是退出程序????

问题描述 谁有phoneGap的实例代码,点击返回按钮后,只是返回上一个页面,而不是退出程序???? 谁有phoneGap的实例代码,点击返回按钮后,只是返回上一个页面,而不是退出程序????,急救,急救,急救???帮忙发一份谢谢,(1987528122)这是qq号,多谢了,希望各位帮帮忙!!!!!!!!!! 解决方案 添加backbutton事件,做你的相关操作cordova/phonegap实现再按一次退出效果

hibernate-Hibernate Query只能返回list吗?可以直接返回一个对象吗?

问题描述 Hibernate Query只能返回list吗?可以直接返回一个对象吗? Hibernate Query只能返回list吗?可以直接返回一个对象吗? Hibernate Query只能返回list吗?可以直接返回一个对象吗? 解决方案 可以返回一个对象调用query.uniqueResult(),但是要确保一定有数据,否则就报错了

《像计算机科学家一样思考Python》——3.11 有返回值函数和无返回值函数

3.11 有返回值函数和无返回值函数 我们使用过的函数中,有一部分函数,如数学函数,会产生结果.因为没有想到更好的名字,我称这类函数为有返回值函数(fruitful function).另一些函数,如print_twice,会执行一个动作,但不返回任何值.我们称这类函数为无返回值函数(void function). 当你调用一个有返回值的函数时,大部分情况下都想要对结果做某种操作.比如,你可能会想把它赋值给一个变量,或者用在一个表达式中: x = math.cos(radians) golden

spring js 返回值-JS如何处理服务器返回值?

问题描述 JS如何处理服务器返回值? 服务器返回的各种类型数据JS会如何做类型转换?比如服务器返回String字符串JS收到String 字符串,返回实体对象接收到object,那返回集合呢?还有其类呢?有没有什么对应关系? 解决方案 服务区返回的数据通常都是json格式的数据,使用的时候可以直接作为js对象来使用的. 返回的实体类型,本质上会转换成对应格式的json字符串的.

如何定义一个属性,但可以让它拥有不同的返回类型,且不同返回类型的属性可以放入同一个列表

问题描述 有如下需求有一个模块,根据实际情况,存在多个输入或输出通道,定义为Channel,且Channel存在属性Value但不同的Channel的Value类型不一致.ChannelA--ValueA--bool--ValueB--int起初的想法是使用泛型Value<T>,则ValueA=newValue<bool>ValueB=newValue<int>如果只有一个Channel,则问题不大,但当我需要更多的Channel,且不同的channel的Value都不

ssh2不能返回result-ssh2中提示不能返回result

问题描述 ssh2中提示不能返回result action方法: public String manageInit() { return "manageInit"; } struts.xml配置 <!-- 管理员 --> /admin/main.jsp </package> applicationContent.xml配置 </bean> 我在浏览器输入http://localhost:8080/HOF1.1/admin/manage!manageI

用三层架构做复杂搜索的时候怎么处理好啊?那是似乎不好写方法啊?而且返回的时候也是返回实体对象列表吗???

问题描述 如题.讨论 解决方案 解决方案二:三层,我的理解是表现层--提交搜索条件,显示搜索结果两部分.罗基层--构造搜索用的SQL语句并调用数据层获取数据.数据层--当然是执行对数据库的操作.至于返回的时候,你不返回实体数据列表,你还想怎么样?解决方案三:不要用存储过程,在业务逻辑里写几个sql执行的方法,然后由界面层产生的数据编辑成sql传过去即可!不要生搬硬套啊楼主.有些内容也可以用datdaview的rowfilter属性进行筛选!这样相当于把所有数据缓存到应用服务器,.

php file_exists 判断文件是否存在,是返回ture或1 否返回false或0

 file_exists($filename);  */    $file ='www.111cn.net.txt';    if( file_exists( $file ) )  {   echo $file,'存在';  }  else  {   echo $file,'不存在,请查检路径或文件名是否写正确了';  }      // 本文章原创于www.111cn.net 转载注明出处