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)之外;?
答案 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
的结构会自动对您放置的任何内容进行排序。此外,创建一个分别获取数字和名称的类,并将其添加到列表中。不要忘记实施Comparable
或Comparator
答案 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;进行排序。顺序。