使用相同的顺序java复制arraylist的元素

时间:2013-05-12 00:46:46

标签: java arraylist hashset

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

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

为什么会那样?

4 个答案:

答案 0 :(得分:4)

LinkedHashSet会保留订单。 TreeSet将根据外部Comparator或通过Comparable进行自然排序进行排序。

Set的一般要点是订单无关紧要。散列旨在将元素尽可能随机地放入。 LinkedHashSet在元素引用之间维护一个链表,因此可以维护一个订单。

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

答案 1 :(得分:0)

HashSet不会对顺序进行排序或维护,API会告诉您:

  

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

考虑使用其他类型的Set,例如TreeSet。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您需要使用TreeSet并为您的数据实现Comparator对象或Comparable接口。你可以阅读对象排序here 哈希集用于快速访问唯一数据,而不是用于维护特定订单。