我写了下面的代码,
public int longestConsecutive(int[] nums) {
Set<Integer> num_set = new HashSet<Integer>();
for (int num : nums) {
num_set.add(num);
System.out.println("num_set: " + num_set.toString());
}
然后我有测试用例,
int[] nums = {100, 4, 200, 1, 3, 2};
然后在最后一行输出中,控制台显示,
num_set: [1, 2, 3, 100, 4, 200]
我想知道为什么添加操作后之前的顺序发生了变化。
陈述HashSet https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html文档
它使no保证集合的迭代顺序;特别是,它不保证订单将remain持续的随着时间的推移.
如果你想使用Set
保持自然顺序,使用排序集 https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html反而。
进一步提供其元素的总排序的 Set。元素使用其自然顺序进行排序,或者通过通常在排序集创建时提供的比较器进行排序。
Edit:
A Set
根据定义,并没有说明其元素的顺序。例如,如果两个 Set 包含相同的元素并且具有相同的大小,则两个 Set 相等。 a 的迭代顺序Set
取决于实现,并且可能在版本之间发生变化,因此您不应对其做出任何假设。这可能取决于#hashCode
,但这也可能取决于将来的插入顺序或其他因素。但是,我们不应该关心,因为如果你这样做,你应该使用List
or a SortedSet
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)