因为是hash,
想清楚一点就看看代码。

解决方案 »

  1.   

    我记得hashSet集合的底层源码造成的,可以慢慢看。
      

  2.   

    是根据hashCode 方法 来找到物理地址, 如果你不覆盖的话 hashCode的返回值跟 你这个变量存放的地址有关,并且会不断变化的,所以 你多次运行 结果可能会不一样。还有救是 Set 本来就是无序的 你不必在意顺序问题,在意顺序 就用List
      

  3.   

    HashSet里面其实是Map值存储的,map里面是Entry的数组,开始的Entry的初始长度是16,每次put的时候,他的下标是根据Hash值跟Entry数组长度的二进制相与得到,所以他存储的下标不是按这0,1,2的顺序来存储的,可能第一次她存储的下标就是4,所以他存储肯定不是顺序的,3和"3"的hash不相等,则存入的下标也不一样所以顺序不一样很正常
      

  4.   

    Set本来就是没有顺序的,List有序
      

  5.   

    你自己看看Integer的HashCode的实现和String的HashCode的实现,就清楚了
      

  6.   

    Set容器本身就是无序的,有序用List
      

  7.   

    hashset本身就无序的,你运行每一次都有可能是不一样的
      

  8.   

    Set没有顺序的,你这次运行和下次运行的结果就可能不一样。
    想实现有顺序的就用List。
      

  9.   

    HashSet集合中有个hashCode方法,该方法是根据你存放数据的地址值的不同早通过哈希算法生成的值,小的值就放在前面,大的值就放在后面,因此你放的三个值在内存中的地址不同排序就不同