用升序形式的数字排序arraylist

时间:2014-03-14 14:00:42

标签: java sorting collections arraylist

al.add("1 Romeo and Juliet");
al.add("2 Juliet");
al.add("3 Romeo");
al.add("4 Mercutio");
al.add("5 Tybalt");
al.add("6 Nurse");
al.add("7 Robert Smith");
al.add("8 The Cure");
al.add("9 Suede");
al.add("10 Neil Codling");

我想在那个arraylist上添加al.add(“11 Brett Anderson”),但每当我这样做时,输出总是这样:

1 Romeo and Juliet
10 Neil Codling
11 Brett Anderson
2 Juliet
3 Romeo
4 Mercutio
5 Tybalt")
6 Nurse
7 Robert Smith
8 The Cure
9 Suede

我想要发生的是数字应按顺序排列,从1到11。 我应该把什么代码放在Collections.sort(arrayname)之外;?

7 个答案:

答案 0 :(得分:2)

您可以创建一个类来处理这个问题:

class Book {
   private int id;
   private String name;
   //other stuff
}

然后只需将新书添加到您的列表中:

al.add(new Book(1,"Romeo and Juliet"));

然后使用自定义比较器对其进行排序:

Collections.sort(al, new Comparator<Book>(){
        @Override
        public int compare(Book b1, Book b2) {
            return Integer.compare(b1.getId(), b2.getId());  
        }
};

<小时/> 另一种方法是使用TreeMap<Integer, String>,其中每个id都映射到一个书名。

如果您真的想继续使用当前的方法(我不推荐),您可以通过空格split String并获取{{}返回的数组中的第一个元素1}}(假设您的split始终采用格式(number whateverIsAfter))。

String

答案 1 :(得分:0)

Collections.sort与正确的Comparator

一起使用

类似的东西:

Collections.sort(ar, new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            // TODO Auto-generated method stub
            return o1.compareTo(o2);
        }
    });

答案 2 :(得分:0)

您可以使用TreeSet代替ArrayList吗? TreeSet的结构会自动对您放置的任何内容进行排序。此外,创建一个分别获取数字和名称的类,并将其添加到列表中。不要忘记实施ComparableComparator

答案 3 :(得分:0)

您的问题是您现在正在按字母顺序排序 ,而不是数字,所以&#34; 11 ...&#34; 来到&#34; 2 ...&#34;。您需要解析直到第一个空格字符,将该内容提取为数字,然后按此排序。这当然应该在第一个空格之前检查&#34;内容&#34; 一个数字。

所有这些听起来都很棘手,但是通过编写一个新的TitleNumberComparator&#39;它不应该太糟糕。

了解比较器,并比较:http://javarevisited.blogspot.co.uk/2011/06/comparator-and-comparable-in-java.html

答案 4 :(得分:0)

您可以使用Comparator作为参数传递给Collections.sort(arrayname,compartor实例),以根据您的条件对ArrayList进行排序。

答案 5 :(得分:0)

您可以使用Map并将键号和标题保留为值

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

答案 6 :(得分:0)

使用java.util.TreeMap,数字作为键,字符串作为值。它将按照#34; natural&#34;进行排序。顺序。