我在HashMap中有一组书籍对象。这本书有book_title,book_author,book_year_published等。我想基于book_title(它是一个字符串,按升序和降序排序),并在屏幕上显示它们。
我希望有人可以帮助我 - 我已经这样做了几个小时但仍然没有找到解决方案。提前谢谢。
答案 0 :(得分:4)
由于您只想对书籍进行排序,因此概念上不需要使用Map作为目标数据结构。 SortedSet
甚至List
似乎更合适。这是一个骨架解决方案:
class Book {
public String getTitle() {
....
}
...
}
class AscendingTitle implements Comparator<Book> {
public int compare(Book b1, Book b2) {
return b1.getTitle().compareTo(b2.getTitle());
}
}
...
SortedSet<Book> orderedBooks = new TreeSet<Book>(new AscendingTitle());
orderedBooks.addAll(hashMap.valueSet()); // or hashMap.keySet();
...
要按不同顺序排序(例如按书名降序),请定义备用比较器类并填充不同的树集。
(如果你正在排序一个非常大的书籍散列图,使用ArrayList和quicksort而不是TreeSet和树插入排序可能更有效。但是对于任何小到足以让你考虑在屏幕上显示它的书籍集合它,排序效率不是问题。)
答案 1 :(得分:2)
将TreeMap
与自定义Comparator
:
sortedMap = new TreeMap (bookTitleComparator);
sortedMap.putAll(bookMap);
为您提供HashMap
的排序版本。
要撤消订单,请使用
revComparator = Collections.reverseOrder (bookTitleComparator);
(见the docs)