我在HashMap中擁有一組書對象。這本書有book_title,book_author,book_year_published等。我想根據book_title(它是一個String)按升序和降序對它們進行排序,並將它們顯示在屏幕上。基於對象的變量對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