我已经按升序对 int 的数组列表进行了排序,但是当我将它复制到一个集合中时,元素不再排序。我正在使用这个:
HashSet<Integer> set = new HashSet<Integer>(sortedArray);
为什么会这样?
LinkedHashSet
将保持秩序。TreeSet
将基于外部Comparator
或自然排序通过Comparable
.
a 的一般观点Set
是顺序无关紧要。散列旨在将元素尽可能随机排列。LinkedHashSet
在对元素的引用之间维护一个链表,因此可以维护一个顺序。
BitSet
(不是 a Set
)可能会也可能不会提供更有效的数据结构。
HashSet 不排序或维护顺序,API 会告诉你:
它不保证订单会随着时间的推移保持不变。
考虑使用另一种类型的 Set,例如 TreeSet。
如果您只关心唯一性,请使用 HashSet。如果您在排序之后,请考虑 TreeSet。