当我开始将值添加到Set<Integer>
时,我得到排序元素。 请参考下面这个例子:为什么设置<Integer>正在排序附加值?
Set<Integer> generated = new HashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);
在这里,我得到的排序Set
[0, 1, 2]
。我想获得价值,因为我添加到generated
对象。
当我开始将值添加到Set<Integer>
时,我得到排序元素。 请参考下面这个例子:为什么设置<Integer>正在排序附加值?
Set<Integer> generated = new HashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);
在这里,我得到的排序Set
[0, 1, 2]
。我想获得价值,因为我添加到generated
对象。
A HashSet
没有元素的可预测顺序。使用LinkedHashSet
来保留元素集合的插入顺序:
集合接口的哈希表和链接列表实现,具有可预测的迭代顺序。
Set<Integer> generated = new LinkedHashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);
首先,它只是一个共同发病率,你得到排序值第一次。如果您多次运行该代码,您将以某种随机顺序看到输出。这是因为HashSet
不会对您添加的元素执行任何排序。
现在,按照插入的顺序获取元素,您可以使用LinkedHashSet
来维护插入顺序。
首先,关于你的问题的标题,Set<Integer>
只是申报类型及其不负责的任何排序/ unsorting行为,主要使用Set
接口的原因是关心唯一性 - 它不允许重复,来自Javadocs:的附加信息
Set是一个不能包含重复元素的集合。
其次,那就是你得到的有序set纯concidence,使用HashSet
当你不通过它进行遍历时,从javadocs:
关心顺序,更多相关信息它不保证为集合的迭代次序;在 特别是,它不能保证该订单随着时间的推移将保持恒定 。这个类允许null元素。
三,关于你在找什么:
我想,因为我加入到生成的对象中获取价值。
,那么你需要使用LinkedHashSet
从javadocs负责其中的元素插入的顺序,再次:
此链接列表定义在 哪些元素迭代顺序,这是为了被插入到集合(插入顺序)中。需要注意的是,如果一个元素重新插入 设置
你可以使用它只是这样 插入顺序不受影响:
Set<Integer> generated = new LinkedHashSet<Integer>();
第四个和最后,作为附加信息,另一个重要的集合,你需要知道它,是TreeSet
,它保证元素将按照自然顺序升序排序,:
的元件使用他们的自然顺序进行排序,或者由一 比较集合创建时提供,这取决于所使用 构造
的可能重复的[这是如何的HashSet产生排序输出?]( http://stackoverflow.com/questions/18648521/how-is-this-hashset-producing-sorted-output) – Radiodef 2015-02-08 01:25:18