基于对象的变量对HashMap中的对象集合进行排序

时间:2010-05-11 07:26:19

标签: java sorting collections map

我在HashMap中有一组书籍对象。这本书有book_title,book_author,book_year_published等。我想基于book_title(它是一个字符串,按升序和降序排序),并在屏幕上显示它们。

我希望有人可以帮助我 - 我已经这样做了几个小时但仍然没有找到解决方案。提前谢谢。

2 个答案:

答案 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