Behavior of Collections.Sort();



我试图理解当存在数字和字母混合时Collections.sort((的排序行为。通过进行研究,我了解到数字在字母之前排序,字符串按字母顺序排序。但是,这个例子对我来说仍然有点困惑。集合.排序升序。如果数字首先排序,为什么结果不是 [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);
排序与

字符串的工作方式是从比较元素的第一个卡特勒开始。如果第一个元素的第一个雕刻器低于第二个元素的第一个雕刻器,则第一个元素较低,因此它在顶部。

如果第一个卡勒斯相等,那么它与第二个相等,依此类推......

例子

">

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

">

88"与"830"相伴 ==> "8"等于"8",然后尝试第二个"3"小于"8",因此"830"低于"88">

结果是 30, 3A, 8, FF,因为数字排在第一位,3 按字母顺序排在 8 之前。你不是在比较数字。您正在比较字符串。要对数字进行排序,您需要一个List<Integer> .

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

最新更新