基于对象的变量对HashMap中对象的集合进行排序
我在HashMap中拥有一组书对象。这本书有book_title,book_author,book_year_published等。我想根据book_title(它是一个String)按升序和降序对它们进行排序,并将它们显示在屏幕上。基于对象的变量对HashMap中对象的集合进行排序
我希望有人能帮助我 - 我已经这样做了几个小时,仍然没有拿出一个解决方案。提前致谢。
使用TreeMap
使用自定义Comparator
:
sortedMap = new TreeMap (bookTitleComparator);
sortedMap.putAll(bookMap);
向你HashMap
的排序版本。
要颠倒顺序,使用
revComparator = Collections.reverseOrder (bookTitleComparator);
(见the docs)
没有这样的构造函数;请参阅http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html – 2010-05-11 07:32:42
+1,以了解“使用具有自定义比较器的TreeMap”的一般概念。 (花时间修复破碎的示例代码) – Jonik 2010-05-11 07:47:43
既然你只是想给本本排序,概念上存在没有必要使用一个映射为目标数据结构。 A 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();
...
排序以不同的顺序(例如,由书名降序),定义替代比较器类和填充不同TreeSet中。 (如果你正在排序一个非常大的书籍散列图,使用ArrayList和快速排序而不是TreeSet和树插入排序可能更有效,但对于任何足够小的书集,您可能会考虑在屏幕上显示它,排序效率不是一个问题。)
+1,可能比使用TreeMap更有用(我只是在阅读完整*问题后才意识到:P) – Jonik 2010-05-11 08:05:29
感谢您的帮助,但我仍然没有得到哪部分代码决定结果是上升还是下降? – 2010-05-11 08:14:19
“compareTo”位。你可以交换参数,以另一种方式进行排序。 – 2010-05-11 08:25:24
您需要指定书籍是键还是地图中的值。 – 2010-05-11 07:31:17
请记住接受(最好)帮助您解决问题的答案。 (使用答案左侧的绿色复选标记。) – Jonik 2010-05-14 12:09:45