String如何排序?

时间:2014-02-19 10:21:08

标签: java sorting

有人可以解释以下功能的输出:

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,依此类推。

有人可以确认一下吗?

4 个答案:

答案 0 :(得分:7)

因此Collections.sort()使用每个compareTo()对象所具有的Comparable方法对Comparable个对象的列表进行排序。对于Stringthe 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)

它首先将12进行比较,结果2的结果更大,因此排序行为将在此时完成,

认为您有两个号码110112

结果是什么:

首先它会将11进行比较,因此它们是等于的,所以它会进入下一步

再次11,转到下一步

此处将02进行比较,此处排序操作将完成