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”,就无需继续检查其他数字。