Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集合迭代未显示正确的值?_Java_Collections_Tree - Fatal编程技术网

Java 集合迭代未显示正确的值?

Java 集合迭代未显示正确的值?,java,collections,tree,Java,Collections,Tree,我正在遍历一个简单的集合。我使用随机整数对象填充集合,这些对象通过以下方式定义: Collection<Integer> treeSet = new TreeSet<>(); treeSet = createFilledCollection(10000, treeSet); printContents(hashSet); //populate the Collection private Collection<Integ

我正在遍历一个简单的集合。我使用随机整数对象填充集合,这些对象通过以下方式定义:

    Collection<Integer> treeSet = new TreeSet<>();
    treeSet = createFilledCollection(10000, treeSet);
    printContents(hashSet);



    //populate the Collection
    private Collection<Integer> createFilledCollection(long size, Collection<Integer> collection){
    
    for(int i = 0 ; i < size; i++) {
        
        Integer integer = (int)(Math.random() * 100);
        collection.add(integer);
        
    }
    
    return collection;
}
我希望看到随机的数字组合

10412344656。。。19 11

(当我通过
createFilledCollection(整数大小,集合集合)
方法添加随机数时。但是,我得到以下输出:

01 2 3 4 5 6…98 99


为什么我看不到随机数?(是的,我检查以确保我没有打印迭代点)

这是因为您使用的是TreeSet,元素的顺序由使用其自然顺序的集合来维护,无论是否提供显式比较器


将TreeSet更改为like HashSet,您将获得所需的输出

为什么您希望从有序集获得随机顺序?的Javadoc特别指出:“元素使用其自然顺序进行排序”。如果您希望保持原始的随机顺序,请使用(任意类型)或者a。@Andreas我想我的措辞很糟糕-我希望我传入的随机值是按某种顺序排列的,但我仍然希望看到我传入的随机值。现在,它只是从0线性增加。当然。你为什么会期望其他情况呢?
TreeSet
是a,javadoc说:“不包含重复元素的集合".---您随机生成10000个0-99范围内的整数。由于生成这么多整数时,该范围内的整数不太可能至少随机生成一次,而且由于重复项已被删除,因此您最终会得到该范围内每个值中的一个,并对其进行排序,因为这是一个
TreeSet
@Andreas哇,我应该这样做我要删除这个问题lol。现在更有意义了。谢谢你Andreas.OP说“我希望看到随机的数字组合”.--
HashSet
不会以随机顺序返回值。对,我使用的是树集-它不会按顺序存储我填充的随机值吗?我希望看到这些随机数以某种类型的顺序出现,我从集中读取的数字没有任何意义。此外,我传入一个
HashSet
,它会产生相同的输出美国犹他州。。。
private void printContents(Collection<Integer> collection) {
    
    StringJoiner joiner = new StringJoiner(",");
    
    for(Integer i : collection) {
        
        if(i > 500)
            break;
        System.out.println(i);
        
        joiner.add(i.toString());
    }
    
    System.out.println(joiner.toString());
    
}