有人可以解释以下功能的输出:
public static void main(String args[]) {
String str1 = new String("20");
String str2 = new String("100");
List<String> list = new ArrayList<>();
list.add(str1);
list.add(str2);
Collections.sort(list); // list is [100,20] now
}
我希望排序工作在输入的ASCII值,即49表示1,50表示2,依此类推。
有人可以确认一下吗?
答案 0 :(得分:7)
因此Collections.sort()
使用每个compareTo()
对象所具有的Comparable
方法对Comparable
个对象的列表进行排序。对于String
,the docs describes this as:
按字典顺序比较两个字符串。比较基于Unicode的值 字符串中的每个字符。此String对象表示的字符序列是 按字典顺序比较参数字符串表示的字符序列。
然后继续描述使用以下方法计算的两个不同字符串的词典排序:
如果两个字符串不同,则它们在某个索引处具有不同的字符 这是两个字符串的有效索引,或者它们的长度不同,或两者兼而有之。如果他们 在一个或多个索引位置具有不同的字符,设k是最小的 指数;然后是确定的位置k处的字符具有较小值的字符串 通过使用&lt;运算符,按字典顺序排在另一个字符串之前。在这种情况下, compareTo返回两者中位置k处两个字符值的差值 string - 即值:
this.charAt(k)-anotherString.charAt(k)
如果没有它们不同的索引位置,那么较短的字符串 按字典顺序排列在较长的字符串之前。在这种情况下,compareTo返回 字符串长度的差异 - 即值:
this.length()-anotherString.length()
答案 1 :(得分:3)
字符串按字典顺序排序,即按字母顺序排序,基于形成它们的字符的int值。
答案 2 :(得分:1)
排序集合时,使用Comparable
接口中定义的compareTo()
方法。这意味着排序的顺序特定于类的类型,在本例中为java.lang.String
。
当您查看String
课程中compareTo()
方法的API文档时,您会看到它说:
按字典顺序比较两个字符串。比较是基于 字符串中每个字符的Unicode值。字符序列 由此String对象表示,按字典顺序进行比较 由参数字符串表示的字符序列。
所以简而言之,它按字母顺序排序,因为 1 出现在 2 之前,它将是第一个。
如果您想更改该顺序,可以使用Collections.sort()
方法并提供Comparator
参数。
答案 3 :(得分:0)
它首先将1
与2
进行比较,结果2
的结果更大,因此排序行为将在此时完成,
认为您有两个号码110
,112
结果是什么:
首先它会将1
与1
进行比较,因此它们是等于的,所以它会进入下一步
再次1
到1
,转到下一步
此处将0
与2
进行比较,此处排序操作将完成