首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 進階教程(四):TreeSet 排序集合完全指南

     編輯:Java 相關知識

TreeSet 是 Java 集合框架中實現排序功能的核心類,基於紅黑樹結構,能夠自動維持元素的有序性。與 LinkedHashSet 維持插入順序不同,TreeSet 根據自然順序或自定義比較器進行排序。

核心特性對比

特性TreeSetLinkedHashSet
順序維護自然排序/自定義排序插入順序
底層結構紅黑樹雙向鏈表 + HashMap
性能O(log n)O(1)

自然排序示例

public static void testNature() {
    // 整數自然排序
    TreeSet<Integer> set = new TreeSet<>();
    for (int i = 10; i >= 1; i--) set.add(i);
    showSet(set); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    // 字符串自然排序(按字符編碼)
    TreeSet<String> set2 = new TreeSet<>();
    for (int i = 10; i >= 1; i--) set2.add(i + "");
    showSet(set2); // [1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
}

自定義比較器

// 反向排序
TreeSet<Integer> set = new TreeSet<>(new MyIntegerComparator());

// 匿名內部類:奇數優先,偶數在後,均降序
TreeSet<Integer> set2 = new TreeSet<>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        boolean o1Odd = o1 % 2 != 0;
        boolean o2Odd = o2 % 2 != 0;
        if (o1Odd && o2Odd) return o2.compareTo(o1);
        if (o1Odd) return -1;
        if (o2Odd) return 1;
        return o2.compareTo(o1);
    }
});

混合類型處理

// 使用統一字符串比較避免 ClassCastException
TreeSet set = new TreeSet(new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
        return o1.toString().compareTo(o2.toString());
    }
});
for (int i = 10; i >= 1; i--) {
    set.add(i);
    set.add(i + "");
}

最佳實踐建議

  • 優先使用泛型避免類型轉換異常
  • 實現 Comparable 接口定義自然順序
  • 複雜排序邏輯使用 Comparator 策略模式
  • 考慮性能敏感場景改用 List + Collections.sort()
TreeSet 排序演示
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved