java - 为什么Java中HashSet不按65535排序?

标签 java sorting

我使用简单的 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/

相关文章:

java - 组合字符串数组和迭代器并排序

java - 如何根据用户从下拉菜单中选择的参数对 Java 对象列表进行排序?

arrays - 从 Ember 中的模型对嵌套数组进行排序?

javascript - 如何在 Vue 中对包含 2 个字段的数组进行排序?

java - 防止 JavaFX 窗口窃取焦点

java - 如何向 JFrame 添加椭圆边框

java - 尝试解析嵌套的 json 并将其存储在嵌套的 Map 中。阅读时,它会在 map 中提供额外的值。代码、输出和 json 下面

javascript - 根据值将 javascript 数组排序为嵌套数组

java - 插入 blob 作为数据类型时出现数据截断错误

java - 不常用的 Java 语法 (JavaParser)?