Collections.Sort()的行为;

时间:2019-02-11 13:52:50

标签: java sorting collections

当数字和字母混合出现时,我试图了解Collections.sort()的排序行为。通过研究,我了解到数字先于字母排序,而字符串则按字母排序。但是,这个例子仍然让我有些困惑.Collections.sorts升序。如果数字先排序,为什么结果不是[8,30,3A,FF]?

在下面的示例中,结果为[30,3A,8,FF]

List<String> hex = Arrays.asList("30", "8", "3A", "FF");
Collections.sort(hex);
System.out.println(hex);

但是在此示例中,结果为[30,40,50,60]

  List<String> nums = Arrays.asList ("50", "30", "60", "40");
  Collections.sort(nums);
  System.out.println(nums);

2 个答案:

答案 0 :(得分:2)

使用Strings进行排序的方式是从比较元素的第一个字符开始。如果第一个元素的第一个角色比第二个元素的第一个角色低,则第一个元素要低一些,因此它在顶部。

如果第一个角色相等,则第二个角色继续,依此类推...

示例

“ 80”与“ 3600”相比==>“ 3”低于“ 8”,因此“ 3600”低于“ 80”

“ 88”等于“ 830” ==>'8'等于'8',然后尝试第二个'3'小于'8',因此“ 830”小于“ 88”

答案 1 :(得分:1)

结果为30、3A,8,FF,因为数字在前,字母3在前8。您正在比较字符串。要对数字进行排序,您需要一个List<Integer>

如果要基于两种不同的数据类型进行排序,则需要使用包装对象在Collections.sort内实现自己的排序方法。