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

Java 進階教程(三):LinkedHashSet 有序集合詳解

     編輯:Java 相關知識

LinkedHashSet 是 HashSet 的有序版本,內部通過雙向鏈表維護元素插入順序。它結合了 HashSet 的高性能查找與鏈表的順序特性,是需要保持插入順序場景的理想選擇。

核心實現原理

  • 底層基於 LinkedHashMap 實現
  • 雙向鏈表記錄插入順序
  • 哈希表保證 O(1) 查找性能
  • 不允許重複元素,最多一個 null

行為演示代碼

public static void test(Set<Integer> set) {
    System.out.println(set.getClass().getName());
    
    // 添加 100-110
    for (int i = 100; i <= 110; i++) set.add(i);
    showSet(set); // [100, 101, 102, ..., 110]
    
    // 刪除 101
    set.remove(101);
    showSet(set); // [100, 102, 103, ..., 110]
    
    // 新增元素追加到末尾
    set.add(98);
    set.add(101);
    set.add(118);
    showSet(set); // [100, 102, ..., 110, 98, 101, 118]
}

關鍵行為特徵

  1. 插入順序保持:首次添加決定位置
  2. 刪除不影響順序:移除元素不會改變其他元素相對位置
  3. 重複添加忽略:再次添加現有元素不改變順序
  4. 新元素追加末尾:新增元素總是出現在最後

應用場景對比

場景推薦集合理由
需要去重且保持輸入順序LinkedHashSetO(1) 查找 + 順序保證
需要排序TreeSet自動排序功能
純去重、無序需求HashSet最高性能
頻繁按索引訪問ArrayList隨機訪問優勢

性能考量

雖然 LinkedHashSet 比 HashSet 多維護鏈表開銷,但查找性能仍接近 O(1),遠優於 List 的 O(n) 線性查找。在需要頻繁去重檢查且保持順序的場景下是最佳平衡選擇。

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