Java 根据对象对HashMap中的对象集合进行排序';s变量

Java 根据对象对HashMap中的对象集合进行排序';s变量,java,sorting,collections,map,Java,Sorting,Collections,Map,我有一个HashMap中的book对象集合。这本书有书名、作者、出版年份等。我想根据书名对它们进行排序,书名是一个字符串,按升序和降序排列,并显示在屏幕上 我希望有人能帮助我——我已经做了几个小时了,但还没有找到解决办法。提前感谢。将树形图与自定义: 为您的HashMap提供排序版本 要颠倒顺序,请使用 revComparator = Collections.reverseOrder (bookTitleComparator); (请参阅)因为您只想对书籍进行排序,所以从概念上讲,不需要使用地

我有一个HashMap中的book对象集合。这本书有书名、作者、出版年份等。我想根据书名对它们进行排序,书名是一个字符串,按升序和降序排列,并显示在屏幕上


我希望有人能帮助我——我已经做了几个小时了,但还没有找到解决办法。提前感谢。

树形图与自定义:

为您的
HashMap
提供排序版本

要颠倒顺序,请使用

revComparator = Collections.reverseOrder (bookTitleComparator);

(请参阅)

因为您只想对书籍进行排序,所以从概念上讲,不需要使用地图作为目标数据结构。
SortedSet
甚至是
列表
似乎是更合适的类型。以下是一个框架解决方案:

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();
...
教材{
公共字符串getTitle(){
....
}
...
}
类AscendingTitle实现了Comparator{
公共整数比较(b1册,b2册){
返回b1.getTitle().compareTo(b2.getTitle());
}
}
...
SortedSet orderedBooks=新树集(new AscendingTitle());
orderedBooks.addAll(hashMap.valueSet());//或hashMap.keySet();
...
要按不同顺序排序(例如按书名降序),请定义替代的比较器类并填充不同的树集


(如果要对非常大的书籍哈希图进行排序,使用ArrayList和quicksort可能比使用TreeSet和tree insertion排序更有效。但对于任何小到可以考虑在屏幕上显示的书籍集合,排序效率并不重要。)

您需要指定这些书是地图中的键还是值。记住接受(最好)帮助您解决问题的答案。(使用答案左侧的绿色复选标记。)没有此类构造函数;有关“使用带有自定义比较器的树形图”的一般思想,请参见+1。(冒昧地修复了损坏的示例代码。)+1,可能比使用TreeMap(我在阅读了整个问题后才意识到:P)更有用。谢谢你的帮助,但我仍然不知道代码的哪一部分决定了结果是升序还是降序?“compareTo”位。你可以交换论点,以另一种方式进行排序。@chandra:Stephen的回答只是给了你一个如何进行升序的例子。根据这个例子,创建您自己的“DegendingTitle”比较器并以与上面完全相同的方式使用它应该是很简单的。@Adrian-我打算建议作为替代方案否定结果。。。但这并不完全正确:-)
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();
...