java中的一个小问题

存10个20以内的随机数,不用hashset,只用arraylist集合。为啥还能得出相同的元素?图片

你应该在add之前做判断,你现在是做了判断,但是又取了值,还可能重复,或者你用map

list集合特点是有序可重复

都说是随机的,你又没做随机重复处理,有重复的很正常

首先,随机生成是有可能生成重复数字的。而list本身就是可以存储重复数据的集合。要是想不重复,要先在list.add()前添加重复判断。另,简易使用set,这样就不会重复了

list:有序可重复
set:无需不重复

有重复是你在random生成随机数的时候产生的,而arraylist又可以存放重复的数据,所以就有了你的这个结果。

我这是测试的 忽略我

再测试一下哈 继续忽略

if contain 应该改成 while contain
因为你第一次可能重复
你第二次也可能重复
要直到不重复 才可以

几率不大的情况你都碰上了。大多数情况下,你这个代码是不会有重复数据出现,但是代码本身没有做到100%的去重处理,你可以自己再认真思考一下。

list中可以存相同的元素因为对应的索引不同。随机数是可以重复的,然而你只判断了一次是否重复。改成while(aa.contains(bb)){bb = rd.nextInt(20) + 1;}。

直接采用set就不会重复了,,

需要正确认识List和Set的异同点。http://blog.csdn.net/speedme/article/details/22398395

list是有序且可重复,相当于是数组