【发布时间】:2018-01-26 20:37:07
【问题描述】:
我正在准备 UIL 计算机竞赛,其中一个练习题涉及一组,这里是逐字逐句:
HashSet<String> set = new HashSet<String>();
set.add("000");
set.add("212");
set.add("211");
set.add("555");
set.add("343");
System.out.println(set);
现在,我知道 HashSet 是未排序的数据结构,但显示了 2 个未排序的选项和 1 个排序的答案选项:
A) [000、211、343、212、555]
B) [000、211、212、343、555]
c) [000, 211, 555, 343, 212]
我天真地选择了B)排序的答案,而正确的答案是A,但我仍然不明白为什么。我找到了每个字符串的哈希函数生成的哈希码:
“000” - 47664
“212” - 49619
“211”-49618
“555” - 52629
“343” - 50674
据我所知,哈希集使用哈希表作为其后端。在那种情况下,根据哈希码,我不明白为什么答案不正确。我将代码插入到 java 中,它会在正确的答案选择中产生结果。这是怎么回事,HashSet 究竟是如何向自身添加项目的?
【问题讨论】:
-
奇怪的问题。我认为不同的 JVM 会根据 hashset 的实现给出不同的结果......所以他们一定希望你理解一些较低级别的东西。