我使用简单的 HashSet 来存储数字。我只是将 0 到 99999 的数字添加到 HashSet 中。但在 65535 之后,HashSet 未排序,但观察到一些不同的模式。尽管我添加了已经排序的数字,但为什么 Collection 没有排序。为什么在 65535 之后观察到如此不同的模式? 65535 是否表示此示例中的内容?
代码:
import java.util.*;
class TestClass {
public static void main(String args[] ) throws Exception {
HashSet<Integer> hsset=new HashSet<>();
for(int i=0;i<100000;i++)hsset.add(i);
for(int i:hsset){
System.out.print(i+" ");
}
}
}
与 65535 的输出差异:
65507 65508 65509 65510 65511 65512 65513 65514 65515 65516 65517 65518 65519 65520 65521 65522 65523 65524 65525 65526 65527 65528 65529 65530 65531 65532 65533 65534 65535 65537 65536 65539 65538 65541 65540 65543 65542 65545 65544 65547 65546 65549 65548 65551
最佳答案
HashSet
没有保证其元素的顺序,因此您看到的很可能是如何完成散列以及如何根据其散列存储元素的工件。
如果您想要一个排序集,TreeSet
可能更合适。如果您只想要一个有序的集合,请查看ArrayList
。 (或 LinkedHashSet
,如 Eran 所示,它维护插入顺序。)
请记住,集合在数学上只是其中的一些元素(没有重复项),而其他所有元素都在其外部。元素之间的顺序根本不重要,甚至不是必需的。然而,由于某种顺序有时对于某些算法很有用,因此有一些特殊的实现可以将此属性添加到集合的数学理想中。
关于java - 为什么Java中HashSet不按65535排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44537990/