Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-设置未按顺序打印_Java - Fatal编程技术网

Java-设置未按顺序打印

Java-设置未按顺序打印,java,Java,我刚开始学习集合,有人提到它不关心顺序,不像列表 但是,当我键入这段代码时: public class test { public static void main(String[] args) { Set<Integer> nums = new HashSet<Integer>(); nums.add(0); nums.add(1); nums.add(2); nums.add(3)

我刚开始学习集合,有人提到它不关心顺序,不像列表

但是,当我键入这段代码时:

public class test {
    public static void main(String[] args) {
        Set<Integer> nums = new HashSet<Integer>();
        nums.add(0);
        nums.add(1);
        nums.add(2);
        nums.add(3);

        for (Integer num : nums)
            System.out.println(num);
    }
}
我尝试过扰乱数字的添加顺序,如下所示:

public class test {
    public static void main(String[] args) {
        Set<Integer> nums = new HashSet<Integer>();
        nums.add(1);
        nums.add(0);
        nums.add(3);
        nums.add(2);

        for (Integer num : nums)
            System.out.println(num);
    }
}
公共类测试{
公共静态void main(字符串[]args){
Set nums=new HashSet();
增加(1)项;
nums.add(0);
增加(3);
增加(2);
for(整数num:nums)
系统输出打印项数(num);
}
}
奇怪的是,输出仍然是有序的

在我打印出它的元素之前,有什么东西可以对集合进行排序吗?
或者
HashSet
不是用来创建无序集的吗?

这只是一个巧合(或者实际上是因为
HashSet
内部如何工作,但现在不关心这一点)。尝试添加一些值,然后删除,然后添加等等,您将看到它无法正确打印<代码>哈希集是无序的。除非另有说明,否则集合通常是无序的。

A
HashSet
确实是未排序的集合。这意味着您不能假设它迭代(和打印)的顺序的任何内容,正如您不能假设它将被排序一样,您也不能假设它不会被排序。订单完全由内部实现决定。

HashSet
不提供任何订单保证。对于某些数据集来说,这并不意味着顺序不能作为其实现方式的副产品出现。只是你不能依赖它,它可能会随着实现的不同而变化,等等。

HashSet在设计上是无序的。您将只放入有限的小数字,这些小数字会以相同的顺序生成值的哈希代码。这就是它按顺序打印的原因。请参阅下面的代码以查看哈希代码并对其进行分析

for (Integer num : nums){
     System.out.println(num + " - hashcode = " +num.hashCode());
}
再加上几个大数字,看看无序的自然在起作用

例如:

nums.add(29000);
nums.add(199201);

对某一事物没有担保与对该事物有相反担保是不同的。
nums.add(29000);
nums.add(199201);