在 Java 中,“Set 无序”这个说法要分情况看,并不是所有 Set 都“绝对无序”。核心原因在于 Set 的设计目标和不同实现类的底层数据结构不同。
Set 是一个不包含重复元素的集合
Set 的规范(接口)本身只保证“元素不重复”,并不保证“顺序”。
所以:
Set<String> set = new HashSet<>();
元素位置 ≈ hash(key) % 数组长度
✅ 结论:HashSet 是无序的(设计如此)
Set<String> set = new LinkedHashSet<>();
HashMap + 双向链表✅ 结论:LinkedHashSet 是有序的(插入顺序)
Set<String> set = new TreeSet<>();
Comparable)Comparator✅ 结论:TreeSet 是有序的(比较排序)
因为:
List 有序可重复,Set 无序不可重复
✅ 更准确的说法是:
Set 不保证顺序,但是某些实现可以有序
| Set 实现 | 是否有序 | 顺序依据 |
|---|---|---|
| HashSet | ❌ 无序 | 哈希值 |
| LinkedHashSet | ✅ 有序 | 插入顺序 |
| TreeSet | ✅ 有序 | 排序规则 |
如果你愿意,我也可以:
想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。