为什么在Sort()之后的ArrayList的开头10

时间:2010-08-31 17:24:33

标签: java sorting arraylist

问题是我有这个问题。我知道为什么它在开始时,因为它是1和0,因此它在9之前甚至在排序之后。但是,使用列表sort()方法可以使用正确的顺序吗?

8 个答案:

答案 0 :(得分:12)

您需要更改列表以包含数字(例如Integer s或Double s)而不是字符串。

答案 1 :(得分:3)

如果列表由于某种原因需要String s(我似乎不太可能),一个选项(使用Guava)是:

List<String> numbers = ...;
Collections.sort(numbers, Ordering.natural().onResultOf(
    new Function<String, Integer>() {
      public Integer apply(String from) {
        return Integer.valueOf(from);
      }
    }));

这将根据每个字符串表示的整数值对字符串列表进行排序。如果不是每个字符串都可以解析为整数,则会抛出异常。

答案 2 :(得分:1)

还有一个建议:

如果您需要坚持使用String并且不想使用Number或等效类,则可以实现Comparator<String>来支持排序算法。这样您就可以根据需要对元素进行排序。

答案 3 :(得分:0)

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

    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断言。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

Java本身不支持您可能需要的String对象的自然排序。有关此问题,请参阅Java Trail。主要原因是由于许多不同的语言等原因造成这样做过于复杂。因此,之前关于将List<String>更改为List<Integer>List<Double>的答案可能是更好的主意。

但是,Stackoverflow上的this question可能对您有所帮助。

答案 6 :(得分:0)

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

但后来我在代码中看到了一个小错误,我忘记了被注释掉的Integer.parseint(String)

无论如何,答案的人都很有帮助,还有许多方法可以解决这个问题。

答案 7 :(得分:0)

序列的词典顺序。