为了账号安全,请及时绑定邮箱和手机立即绑定

比较器如何与Arrays.sort一起使用?

比较器如何与Arrays.sort一起使用?

隔江千里 2021-04-29 15:10:03
我的问题是比较器接口如何与arrays.sort方法一起使用?对于前:  Arrays.sort(arr, new Comparator<String>(){        public int compare(String first, String second){            System.out.println("Comparator : (second+first)  "+(second+first)+" first+ second "+(first+second)+" comparing : "+(second+first).compareTo(first+second));            return (second+first).compareTo(first+second);        }    });输入arr = {"34","4","23","15"}因此,基本上以上代码段都是将数组排列为最大的数字。输出将是 {"4","34","23","15"}我打印了中间结果并且输出是预期的,但我无法理解它是如何工作的。有人可以说通过使用compare方法返回的整数对它进行排序吗?Comparator : (second+first)  344 first+ second 434 comparing : -1Comparator : (second+first)  423 first+ second 234 comparing : 2 Comparator : (second+first)  3423 first+ second 2334 comparing : 1 Comparator : (second+first)  3415 first+ second 1534 comparing : 2Comparator : (second+first)  2315 first+ second 1523 comparing : 1
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

规则 a.compareTo(b)

  • returns negative value : a is before b

  • returns 0 : a equal to b

  • return positive value : a is after b


因为参数是,first, second并且您进行比较,second.compareTo(first)您将获得相反的顺序:

second+first)   344 first+ second  434 comparing : -1 >>   4 is before 34

(second+first)   423 first+ second  234 comparing : 2  >>  23 is after   4

(second+first)  3423 first+ second 2334 comparing : 1  >>  23 is after  34

(second+first)  3415 first+ second 1534 comparing : 2  >>  15 is after  34

(second+first)  2315 first+ second 1523 comparing : 1  >>  15 is after  23

使用这5before/after条规则,顺序是4 34 23 15


这是Reverse Lexical Order(词汇,因为使用String,反向,因为与第一比较第二)

一种情况的详细信息

  • sort方法将比较434,因此first=4second=34

  • 您进行计算"344".compareTo("434"),因为344在434之前是344的词汇顺序

  • 由于-1sort方法会记得4是前34


查看完整回答
反对 回复 2021-05-12
  • 1 回答
  • 0 关注
  • 228 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信