首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java TreeSet 多屬性排序:Comparable 與 Comparator 策略

     編輯:程式設計疑難解答

TreeSet 排序機制

TreeSet 內部為紅黑樹,**構造時即決定唯一排序規則**。元素必須實作 Comparable (自然排序) 或提供 Comparator (定製排序)。**單一 TreeSet 實例只能有一種排序順序**。

需求:價格、作者、出版日期三種排序

三種方案:

方案一:三個 TreeSet + 不同 Comparator (推薦)

class Book {
    String title, author;
    double price;
    LocalDate pubDate;
    // getter...
}

// 三種排序器
Comparator byPrice = Comparator.comparingDouble(Book::getPrice);
Comparator byAuthor = Comparator.comparing(Book::getAuthor);
Comparator byPubDate = Comparator.comparing(Book::getPubDate);

// 三個 Set
Set priceSet = new TreeSet<>(byPrice);
Set authorSet = new TreeSet<>(byAuthor);
Set dateSet = new TreeSet<>(byPubDate);

// 同步插入
void addBook(Book b) {
    priceSet.add(b);
    authorSet.add(b);
    dateSet.add(b);
}

方案二:List + 現場排序 (資料量小)

List books = new ArrayList<>();
// 查詢時
books.sort(Comparator.comparingDouble(Book::getPrice));
books.forEach(System.out::println);

方案三:資料庫查詢 ORDER BY (大數據)

後端 SQL SELECT * FROM books ORDER BY price,前端直接顯示,避免記憶體排序。

總結

TreeSet 適合「單一排序、自動去重、頻繁查詢有序集合」。多排序需求請建立多個 TreeSet 或改用 List + 現場排序/資料庫排序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved