排序字母和数字的arraylist

时间:2013-05-09 18:15:38

标签: java

我正在尝试对由数字和字母组成的字符串的arylylist进行排序,列表的一个例子一旦排序将是:

name 1
name 2
name 3
name 11
name 12
name 13

但是当我使用collections.sort()时,它会这样排序:

name 1
name 11
name 12
name 13
name 2
name 3

任何想法,我正在寻找的那种类型将会被调用或者它是如何实现的?

5 个答案:

答案 0 :(得分:7)

String默认按字母顺序排序。您需要实现自己的Comparator<String>或使用实现Comparable的对象(或使用Comparator来解决此问题),尤其是在您使用的String之后是单词和整数的混合。

答案 1 :(得分:1)

实现comprable,覆盖compareTo,将名称解析出来然后你可以按它们排序。你想按数字或两者排序吗?

答案 2 :(得分:1)

这是因为它按字母顺序排序,一次查找一个字符。

name 13
name 2

此处,“name”是相同的部分,向前移动,您有“1”和“2”。 1出现在2之前。请记住132只是字符串而不是数字。

你可以write your own comparator。为了实现你的目标。

答案 3 :(得分:0)

您可以使用HashMap<Integer,String> map并对其进行排序

答案 4 :(得分:0)

根据他人的建议,您可以编写自己的Comparator,如下所示

      Comparator<? super String> myComparator = new Comparator<String>() {

        public int compare(String name1, String name2) {
            int num1 = Integer.parseInt(name1.split(" ")[1]);
            int num2 = Integer.parseInt(name2.split(" ")[1]);
            // > : Increasing order 
            // < : Decreasing order
            if(num1 < num2)
                    return 1;
            else
                    return -1;
        }

      };
      Collections.sort(names, myComparator);

输出:

  

姓名91
  名称12
  名称11
  名称2