set是有序的吗?

1 个回答

  • 小王子-B528
    你爱你的玫瑰是因为你在你的玫瑰上花了太多的时间!
    `Set` 是否有序,要看具体实现: ## 1. **无序的 Set** * **`HashSet`** * 基于 `HashMap` 实现,元素顺序由哈希值决定,**不保证存取顺序**。 * 每次迭代的顺序可能不同(数据结构变化时顺序会变)。 ```java Set<String> set = new HashSet<>(); set.add("B"); set.add("A"); set.add("C"); System.out.println(set); // 可能输出 [A, B, C],但顺序不保证固定 ``` ## 2. **有序的 Set(保持插入顺序)** * **`LinkedHashSet`** * 在 `HashSet` 基础上用**双向链表**维护插入顺序。 * 遍历时顺序和插入顺序一致。 ```java Set<String> set = new LinkedHashSet<>(); set.add("B"); set.add("A"); set.add("C"); System.out.println(set); // 永远输出 [B, A, C] ``` ## 3. **有序的 Set(按排序规则)** * **`TreeSet`** * 基于红黑树实现,元素按照**自然顺序**(`Comparable`)或**自定义比较器**排序。 ```java Set<String> set = new TreeSet<>(); set.add("B"); set.add("A"); set.add("C"); System.out.println(set); // [A, B, C] 按字典序排好 ``` ### 总结 * **HashSet**:无序 * **LinkedHashSet**:有序(按插入顺序) * **TreeSet**:有序(按排序规则)
    发布于 2025-08-13 13:33 •IP属地 陕西
    举报
    评论
    收藏