如何保留 HashSet 中的插入顺序?

2024-02-25

我写了下面的代码,

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(使用前将#替换为@)

如何保留 HashSet 中的插入顺序? 的相关文章

随机推荐