TreeSet 內部為紅黑樹,**構造時即決定唯一排序規則**。元素必須實作 Comparable (自然排序) 或提供 Comparator (定製排序)。**單一 TreeSet 實例只能有一種排序順序**。
三種方案:
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 books = new ArrayList<>();
// 查詢時
books.sort(Comparator.comparingDouble(Book::getPrice));
books.forEach(System.out::println);
後端 SQL SELECT * FROM books ORDER BY price,前端直接顯示,避免記憶體排序。
TreeSet 適合「單一排序、自動去重、頻繁查詢有序集合」。多排序需求請建立多個 TreeSet 或改用 List + 現場排序/資料庫排序。