Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 为什么排序()之后的ArrayList开头有10_Java_Sorting_Arraylist - Fatal编程技术网

Java 为什么排序()之后的ArrayList开头有10

Java 为什么排序()之后的ArrayList开头有10,java,sorting,arraylist,Java,Sorting,Arraylist,正如问题所说,我有这个问题。我知道为什么它是在一开始,因为它是1和0,所以它在9之前,甚至在排序之后。但是,列表的排序方法是否正确?您需要将列表更改为包含数字(例如,整数s或双精度s)而不是字符串。如果您对字符串而不是数字进行排序,此代码可能有助于您理解差异: ArrayList stringList = new ArrayList(); stringList.add("9"); stringList.add("10"); Collections.sort(str

正如问题所说,我有这个问题。我知道为什么它是在一开始,因为它是1和0,所以它在9之前,甚至在排序之后。但是,列表的排序方法是否正确?

您需要将列表更改为包含数字(例如,
整数
s或
双精度
s)而不是字符串。

如果您对字符串而不是数字进行排序,此代码可能有助于您理解差异:

    ArrayList stringList = new ArrayList();
    stringList.add("9");
    stringList.add("10");
    Collections.sort(stringList);
    Assert.assertEquals("10", stringList.get(0));

    ArrayList integerList = new ArrayList();
    integerList.add(9);
    integerList.add(10);
    Collections.sort(integerList);
    Assert.assertEquals(9, integerList.get(0));

使用JUnit断言进行断言。

正如其他人所说,如果要对实际数字进行排序,请不要将它们存储在字符串中。如果您真的想自然地对包含数字的字符串进行排序,我更喜欢使用Apache Commons Collection Utils ComparatorUtils.NATURAL\u COMPARATOR,尽管还有其他具有不同可配置性和功能的选项。

Java本机不支持按您可能需要的方式对
字符串
对象进行自然排序。关于这一点,请参阅。主要原因是由于许多不同的语言等原因,这样做太复杂。因此,前面关于将
列表
更改为
列表
列表
的答案可能是一个更好的主意


但是,on Stackoverflow可能对您有所帮助。

如果出于某种原因(我似乎不太可能)列表需要为
字符串,则一个选项(使用)是:

列表编号=。。。;
Collections.sort(number,Ordering.natural().onResultOf(
新函数(){
公共整数应用(字符串来自){
返回整数.valueOf(from);
}
}));
这将根据每个字符串表示的整数值对字符串列表进行排序。如果不是每个字符串都可以解析为整数,则将引发异常。

还有一个建议:


如果您需要坚持使用字符串,并且不想使用数字或等效类,则可以实现一个
比较器来支持排序算法。通过这种方式,您可以根据需要对元素进行排序。

我无法理解它,因为我创建的是整数而不是字符串,但它不起作用

但是后来我发现代码中有一个小错误,我忘记了注释掉的
Integer.parseint(String)


不管怎么说,这些答案都很有帮助,还有很多其他方法可以解决这个问题。

序列的字典顺序。

你的问题没有真正意义。也许您可以添加一些代码?我有一种预感,你在分类你在寻找一种“自然分类”。这是前面的一个问题,答案是:也许你在排序
字符串
而不是
数字
?也许他需要字符串。如果是这样,他应该使用自然的sortKasper,你应该编辑你的问题来提及这一点,或者添加它作为对问题的评论,因为这并不是一个真正的答案。
List<String> numbers = ...;
Collections.sort(numbers, Ordering.natural().onResultOf(
    new Function<String, Integer>() {
      public Integer apply(String from) {
        return Integer.valueOf(from);
      }
    }));