所以我知道集合不能重复...更正式地说,集合不包含元素e1和e2,使得e1.equals(e2),并且最多只有一个null元素.我意识到Treeset为我排序.这是我的设定代码:
import java.util.Set; import java.util.HashSet; import java.util.TreeSet; public class SetExample { public static void main(String args[]) { int count[] = {11, 22, 33, 44, 55}; Sethset = new HashSet (); try{ for(int i = 0; i<4; i++){ hset.add(count[i]); } System.out.println(hset); TreeSet treeset = new TreeSet (hset); System.out.println("The sorted list is:"); System.out.println(treeset); } catch(Exception e){ e.printStackTrace(); } } }
这是我的输出:
ArrayList Elements:
[Chaitanya,Rahul,Ajeet]
LinkedList Elements:[Kevin,Peter,Kate]
[ 33,22,11,44]
排序列表是:
[11,22,33,44]
为什么设置总是按[33,22,11,44]的顺序?
引用javadoc HashSet
:
它不能保证集合的迭代顺序; 特别是,它不保证订单会随着时间的推移保持不变.
它没有说"随机".它并没有说它不一致.它基本上只是说订单是未定义的并且可能会随着时间的推移而改变,这意味着如果添加更多值,则当前值的顺序可能会发生变化.
请注意,尽管您获得了特定值的一致但未定义的顺序,但另一个版本的Java运行时库可能会提供不同但仍然一致的顺序.
对象的实际顺序取决于这些对象的哈希值,当前哈希桶的数量HashSet
,以及用于将哈希值映射到哈希桶的算法.该算法可能在Java运行时库的不同版本之间发生变化,并且在添加和删除值时,散列桶的数量可能会发生变化HashSet
.
要查看此效果,请尝试HashSet
使用HashSet(int initialCapacity)
构造函数创建具有不同初始容量的内容.不同的容量可能会以不同的方式排序值,但会保持一致,这意味着相同的值,相同的容量和相同的运行时版本将始终是相同的顺序.