java Comparator接口的返回 1,-1,0 的理解

针对jdk8中的List.sort()

Comparator(int a, int b)
if( a < b ){
	// 返回负数或0值,不交换
	// 返回正数值,交换ab
}
if( a > b){
	// 返回负数值,交换ab
	// 返回正数或0值,不交换
}
if( a == b ){
	//返回非0值,会报异常Comparison method violates its general contract!
}

//推荐使用
a.compareTo(b)//升序
b.compareTo(a)//降序
//以下kotlin代码
kotlin.Comparator(a:double, b:double)
(a - b).toInt()
(b - a).toInt()
//以上两种写法很大可能报会报异常Comparison method violates its general contract!
//参考 https://www.cnblogs.com/firstdream/p/7204067.html

//异常示例
//以下数据会出现异常Comparison method violates its general contract!
//jdk版本1.8.0_181-b13
fun main(args:Array<String>){
    val list = mutableListOf(
            1.8,1.6,1.7,5.3,2.4,1.8,2.0,2.3,2.3,3.5,
            2.7,4.0,4.0,1.7,3.0,3.2,4.0,4.0,4.0,3.4,
            3.4,3.4,3.0,2.2,2.0,3.2,3.2,3.2,2.0,2.3,
            2.3,2.2,2.7)
    list.sortWith(kotlin.Comparator{a, b ->(b - a).toInt()})
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值