Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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/2/python/295.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_Hashset - Fatal编程技术网

Java 散列集的阶

Java 散列集的阶,java,hashset,Java,Hashset,(这个问题不是关于在HashSet上使用LinkedHashSet) 我知道HashSet不保留任何加法顺序: 它不保证集合的迭代顺序;特别是,它不能保证订单在一段时间内保持不变 假设有一个程序以相同的顺序将完全相同的元素添加到HashSet并输出元素 HashSet<Integer> set = new HashSet<Integer>(); Random random = new Random(1000); for (int i = 0; i < 1000; i

(这个问题不是关于在
HashSet
上使用
LinkedHashSet

我知道
HashSet
不保留任何加法顺序:

它不保证集合的迭代顺序;特别是,它不能保证订单在一段时间内保持不变

假设有一个程序以相同的顺序将完全相同的元素添加到
HashSet
并输出元素

HashSet<Integer> set = new HashSet<Integer>();
Random random = new Random(1000);
for (int i = 0; i < 1000; i++)
    set.add(random.nextInt());
set.forEach(s -> System.out.println(s));
HashSet=newhashset();
随机数=新随机数(1000);
对于(int i=0;i<1000;i++)
set.add(random.nextInt());
set.forEach->System.out.println;

如果我多次重新运行同一程序,是否保证输出相同?

您可能需要检查:

它不保证集合的迭代顺序;特别是,它不能保证订单在一段时间内保持不变


实际上,是的。但我不认为这是保证,所以你应该明确你的意思是保证。这些对象还需要在不同的运行中使用相同的哈希代码,大多数情况下都是这样。也就是说,他们不能使用在jvm时间随机挑选的种子。(这是可能的,但在Java中并不常见。我想我从未见过。)保证?否。但它们可能是一致的,这取决于
hashCode()
实现。相比之下,我听说Java 9的
Map
工厂实现将使用随机种子来阻止开发人员依赖迭代顺序。你不明白“它不保证”的哪一部分吗?@yshavit有趣的想法,但这似乎不是一个动机:@yshavit我认为它实际上基于hashCode为任何键类型创建了一个树,作为一个tiebreaker.OP引用了这个确切的句子:)谢谢你的快速回复。因此,假设
hashCode()
实现是正确的(即不会随时间变化),结果是否会一致?我阅读了文档,但我发现它有点混乱,尤其是“它不能保证随着时间的推移,顺序会保持不变”。这意味着,如果我在10分钟后从
哈希集
检索输出,我会得到不同的结果?我刚刚看到了,但如果你已经知道文档中说的相反,那么问顺序是否有保证对我来说没有意义这一切都取决于它是如何实现的,但是医生明确地说,这个顺序是不能保证的,所以我不会冒险认为它是不可变的/不变的。它有可能做到这一点,但我不会指望它是一个预期的和可行的行为。