Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串是如何排序的?_Java_Sorting - Fatal编程技术网

Java 字符串是如何排序的?

Java 字符串是如何排序的?,java,sorting,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

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

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
}
publicstaticvoidmain(字符串参数[]){
字符串str1=新字符串(“20”);
字符串str2=新字符串(“100”);
列表=新的ArrayList();
添加列表(str1);
添加列表(str2);
Collections.sort(list);//现在list是[100,20]
}
我希望排序在输入的ASCII值中起作用,即49代表1,50代表2,依此类推


有人能确认一下吗?

字符串是根据组成字符串的字符的int值按字典顺序排序的,也就是按字母顺序排序的。

因此,使用每个
可比较的
对象所具有的
比较方法对对象列表进行排序。对于,:

按字典顺序比较两个字符串。比较基于的Unicode值 字符串中的每个字符。此字符串对象表示的字符序列为 按字典顺序与参数字符串表示的字符序列进行比较

然后,它继续描述使用以下方法计算的两个不同字符串的字典顺序:

如果两个字符串不同,则它们在某个索引处具有不同的字符 这是两个字符串的有效索引,或者它们的长度不同,或者两者都不同。如果他们 在一个或多个索引位置具有不同的字符,设k为最小的 指数然后,其字符在位置k处具有较小值的字符串,如所确定 通过使用<运算符,按字典顺序优先于另一个字符串。在这种情况下,, compareTo返回两个字段中位置k处两个字符值的差值 字符串--即值:

   this.charAt(k)-anotherString.charAt(k)
如果没有不同的索引位置,则使用较短的字符串 按字典顺序在较长字符串之前。在这种情况下,compareTo返回 字符串长度的差异——即值:

   this.length()-anotherString.length()

对集合排序时,将使用界面中定义的
compareTo()
方法。这意味着排序的顺序特定于类的类型,在本例中为
java.lang.String

当您从
String
类中查看该方法的API文档时,您将看到它说:

按字典顺序比较两个字符串。比较是基于 字符串中每个字符的Unicode值。字符序列 由该字符串对象表示的对象按字典顺序与 由参数字符串表示的字符序列

因此,简而言之,它是按字母顺序排序的,因为1排在2之前,所以它将是第一个


如果要更改顺序,可以使用该方法并提供一个参数。

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

假设你有这两个号码
110
112

结果是:

首先,它将
1
1
进行比较,使它们相等,然后进入下一步

再次
1
1
,因此进入下一步


在这里,它将
0
2
进行比较,在这里,排序操作将完成

字符串按字母顺序排序,只要“1”小于“2”,就无需继续检查其他数字。