首页 > 解决方案 > Collections.Sort() 的行为;

问题描述

当数字和字母混合存在时,我试图了解 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);

标签: javasortingcollections

解决方案


sort 使用字符串的方式是从比较元素的第一个字符开始。如果第一个元素的第一个字符低于第二个元素的第一个字符,则第一个元素较低,因此它在顶部。

如果第一个字符相等,则继续处理第二个字符,依此类推...

例子

"80" 与 "3600" 相比 ==> '3' 低于 '8' 因此 "3600" 低于 "80"

"88" 与 "830" 比较 ==> '8' 等于 '8',然后尝试第二个 '3' 低于 '8' 所以 "830" 低于 "88"


推荐阅读