当数字和字母混合出现时,我试图了解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);
答案 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
内实现自己的排序方法。