Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/155.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 8 Java流收集器对给定流进行排序_Java 8_Set_Java Stream - Fatal编程技术网

Java 8 Java流收集器对给定流进行排序

Java 8 Java流收集器对给定流进行排序,java-8,set,java-stream,Java 8,Set,Java Stream,你能让我知道为什么下面的代码返回一个未排序数组的集合排序顺序吗 Stream<Integer> s = Stream.of(2, 3, 1, 4, 5); Set<Integer> mySet = s.collect(Collectors.toSet()); System.out.println(mySet); 如果我使用列表而不是集合,则不会发生这种情况。 此外,当输入中有负数时,排序并不总是正确的。 是否有任何内置功能来对集合进行排序?这

你能让我知道为什么下面的代码返回一个未排序数组的集合排序顺序吗

    Stream<Integer> s = Stream.of(2, 3, 1, 4, 5);

    Set<Integer> mySet = s.collect(Collectors.toSet());

    System.out.println(mySet);
如果我使用列表而不是集合,则不会发生这种情况。 此外,当输入中有负数时,排序并不总是正确的。
是否有任何内置功能来对集合进行排序?

这只是一个意外,与
收集器
无关。在OpenJDK 11.0.2上,我得到了以下信息(因为
Collector.toSet()
当前由
HashSet
支持):


这真的只是个意外。确实,这是一个非常奇怪的问题,它与
Integer.hashCode()
实现有关(它只是
Integer.intValue()
本身),以及这如何导致对某些集合的
HashSet
元素进行意外排序。

这只是巧合。接口不提供任何排序保证,但是。

排序也不总是正确的。请参见这是一个无序收集器。
Set::of
不受此影响,至少如果运行足够的时间,您还可以通过将结构更改为
new HashSet(4,2f)
,使结果更有趣。或者您将构造更改为
newhashset(1,5f)
,以开始查看插入顺序,但是
set.add(100)
会破坏它…
1, 2, 3, 4, 5
Set<Integer> set = new HashSet<>();
set.add(2);
set.add(3);
set.add(1);
set.add(4);
set.add(5);
System.out.println(set); // [1, 2, 3, 4, 5]
set.add(100);
System.out.println(set); // [1, 2, 3, 4, 100, 5]