2010-05-11 183 views
2

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

我希望有人能幫助我 - 我已經這樣做了幾個小時,仍然沒有拿出一個解決方案。提前致謝。

+0

您需要指定書籍是鍵還是地圖中的值。 – 2010-05-11 07:31:17

+0

請記住接受(最好)幫助您解決問題的答案。 (使用答案左側的綠色複選標記。) – Jonik 2010-05-14 12:09:45

回答

2

使用TreeMap使用自定義Comparator

sortedMap = new TreeMap (bookTitleComparator); 
sortedMap.putAll(bookMap); 

向你HashMap的排序版本。

要顛倒順序,使用

revComparator = Collections.reverseOrder (bookTitleComparator); 

(見the docs

+1

沒有這樣的構造函數;請參閱http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html – 2010-05-11 07:32:42

+1

+1,以瞭解「使用具有自定義比較器的TreeMap」的一般概念。 (花時間修復破碎的示例代碼) – Jonik 2010-05-11 07:47:43

4

既然你只是想給本本排序,概念上存在沒有必要使用一個映射爲目標數據結構。 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和樹插入排序可能更有效,但對於任何足夠小的書集,您可能會考慮在屏幕上顯示它,排序效率不是一個問題。)

+0

+1,可能比使用TreeMap更有用(我只是在閱讀完整*問題後才意識到:P) – Jonik 2010-05-11 08:05:29

+0

感謝您的幫助,但我仍然沒有得到哪部分代碼決定結果是上升還是下降? – 2010-05-11 08:14:19

+0

「compareTo」位。你可以交換參數,以另一種方式進行排序。 – 2010-05-11 08:25:24

相關問題