当前位置:  开发笔记 > 编程语言 > 正文

为什么Java中的Set似乎每次都以相同的方式插入?我认为顺序在Set中无关紧要

如何解决《为什么Java中的Set似乎每次都以相同的方式插入?我认为顺序在Set中无关紧要》经验,为你挑选了1个好方法。

所以我知道集合不能重复...更正式地说,集合不包含元素e1和e2,使得e1.equals(e2),并且最多只有一个null元素.我意识到Treeset为我排序.这是我的设定代码:

import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;

public class SetExample {

  public static void main(String args[]) { 
    int count[] = {11, 22, 33, 44, 55};
    Set hset = new HashSet();
    try{
      for(int i = 0; i<4; i++){
         hset.add(count[i]);
      }
      System.out.println(hset);

      TreeSet treeset = new TreeSet(hset);
      System.out.println("The sorted list is:");
      System.out.println(treeset);
    }
    catch(Exception e){
        e.printStackTrace();
    }
  }
}

这是我的输出:

ArrayList Elements:
[Chaitanya,Rahul,Ajeet]
LinkedList Elements:[Kevin,Peter,Kate]
[ 33,22,11,44]
排序列表是:
[11,22,33,44]

为什么设置总是按[33,22,11,44]的顺序?



1> Andreas..:

引用javadoc HashSet:

它不能保证集合的迭代顺序; 特别是,它不保证订单会随着时间的推移保持不变.

它没有说"随机".它并没有说它不一致.它基本上只是说订单是未定义的并且可能会随着时间的推移而改变,这意味着如果添加更多值,则当前值的顺序可能会发生变化.

请注意,尽管您获得了特定值的一致但未定义的顺序,但另一个版本的Java运行时库可能会提供不同但仍然一致的顺序.

对象的实际顺序取决于这些对象的哈希值,当前哈希桶的数量HashSet,以及用于将哈希值映射到哈希桶的算法.该算法可能在Java运行时库的不同版本之间发生变化,并且在添加和删除值时,散列桶的数量可能会发生变化HashSet.

要查看此效果,请尝试HashSet使用HashSet(int initialCapacity)构造函数创建具有不同初始容量的内容.不同的容量可能会以不同的方式排序值,但会保持一致,这意味着相同的值,相同的容量和相同的运行时版本将始终是相同的顺序.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有