1

我已经按升序对 int 的数组列表进行了排序,但是当我将它复制到一个集合中时,元素不再排序。我正在使用这个:

HashSet<Integer> set = new HashSet<Integer>(sortedArray);  

为什么会这样?

4

4 回答 4

4

LinkedHashSet将保持秩序。TreeSet将基于外部Comparator或自然排序通过Comparable.

a 的一般观点Set是顺序无关紧要。散列旨在将元素尽可能随机排列。LinkedHashSet在对元素的引用之间维护一个链表,因此可以维护一个顺序。

BitSet(不是 a Set)可能会也可能不会提供更有效的数据结构。

于 2013-05-12T00:48:25.343 回答
0

HashSet 不排序或维护顺序,API 会告诉你:

它不保证订单会随着时间的推移保持不变。

考虑使用另一种类型的 Set,例如 TreeSet。

于 2013-05-12T00:47:33.380 回答
0

如果您只关心唯一性,请使用 HashSet。如果您在排序之后,请考虑 TreeSet。

于 2013-05-12T00:52:42.573 回答
0

您需要使用TreeSet并为您的数据实现 Comparator 对象或 Comparable 接口。您可以在此处阅读有关对象排序的信息, 哈希集旨在快速访问唯一数据,而不是用于维护特定顺序。

于 2013-05-12T00:53:24.900 回答