我按升序对int的arraylist进行了排序,但是当我将它复制到一个集合中时,元素就不再排序了。 我正在使用这个:
HashSet<Integer> set = new HashSet<Integer>(sortedArray);
为什么会那样?
答案 0 :(得分:4)
LinkedHashSet
会保留订单。 TreeSet
将根据外部Comparator
或通过Comparable
进行自然排序进行排序。
Set
的一般要点是订单无关紧要。散列旨在将元素尽可能随机地放入。 LinkedHashSet
在元素引用之间维护一个链表,因此可以维护一个订单。
BitSet
(不是Set
)可能会或可能不会提供更有效的数据结构。
答案 1 :(得分:0)
HashSet不会对顺序进行排序或维护,API会告诉您:
它不保证订单会随着时间的推移保持不变。
考虑使用其他类型的Set,例如TreeSet。
答案 2 :(得分:0)
如果您只关心唯一性,请使用HashSet。如果您在排序后,请考虑TreeSet。
答案 3 :(得分:0)