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());
}