list里面取随机几个对象问题

brucecj1227 2006-12-05 04:01:28
现有一个list,里面取的是一个个的String对象,这个list.size=50,我想从里面随机取出六个String对象,但不能重复,请问各位有没有什么好的办法?代码尽是要简洁一点的
...全文
1046 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxnucseven 2006-12-06
  • 打赏
  • 举报
回复
if(!newList.contain(str)){
newList.add(str);
i++;
}
这个判断已经去掉重复了。
e3002 2006-12-06
  • 打赏
  • 举报
回复
list 可以存在重复值
Marcus-Z 2006-12-06
  • 打赏
  • 举报
回复
Set是不能加重复的,你的LIST里本身里面也有可能重复的
sxnucseven 2006-12-05
  • 打赏
  • 举报
回复
哦 写错了 是不改变原来的List
sxnucseven 2006-12-05
  • 打赏
  • 举报
回复
我那样写就是为了改变原来的list
lz给的只是list接口 具体实现可能不知道,不知道具体实现类是不能用copy()的,所以只能县创建另一个arrylist或者linkedlist或者vector,不管哪个还得把以前的list中的string一个一个加近来,多麻烦,50取6重复取得概率不大,所以就用循环加判断了。
捏造的信仰 2006-12-05
  • 打赏
  • 举报
回复
haisenmai(我应该做得到) 第二次答案为正解
haisenmai 2006-12-05
  • 打赏
  • 举报
回复
sxnucseven(SC=>CS=>KOF=>O2JAM=>CSDN)(我进步了吗?)
楼上的,如果第一次把第50个取出来了,第二次又随到第50个会出现什么状况阿?


to
zhh1981(**的猪头) sxnucseven 这位兄弟说的你考虑下啊
fool_leave 2006-12-05
  • 打赏
  • 举报
回复
zhh1981是对的

今天刚答完一个人的问题,Random不可以在for循环里面new

而且Set的效率要高
开发一部 2006-12-05
  • 打赏
  • 举报
回复
zhh1981(**的猪头) 写的那个就没有问题。
Marcus-Z 2006-12-05
  • 打赏
  • 举报
回复
haisenmai(我应该做得到)
haisenmai 2006-12-05
  • 打赏
  • 举报
回复
拷贝到另外一个list里面去删副本就是了
Marcus-Z 2006-12-05
  • 打赏
  • 举报
回复
LZ用我的可以吗?
brucecj1227 2006-12-05
  • 打赏
  • 举报
回复
不能删的,我这次用了下次还要再用的,删了我岂不是没用的了?
Marcus-Z 2006-12-05
  • 打赏
  • 举报
回复
注意list里面也可能有重复对象啊
Marcus-Z 2006-12-05
  • 打赏
  • 举报
回复
Set set = new HashSet();
Random rd=new Random();
int k;
while (set.size()<6){
k=rd.nextInt(50);
set.add(list.get(k));
}
Pro_Vida 2006-12-05
  • 打赏
  • 举报
回复
xwj1003(哈罗DayDayUp) 你的办法行得通哈!!不错哦~!
haisenmai 2006-12-05
  • 打赏
  • 举报
回复
for(int i =0;i<6;i++){
Random rd=new Random();
k=rd.nextInt(list.size);
str[i]=list.get(k);
list.remove(k);
}
xwj1003 2006-12-05
  • 打赏
  • 举报
回复

用linklist,取到一个删除一个。50-1
brucecj1227 2006-12-05
  • 打赏
  • 举报
回复
楼上的,我觉得这个方法好像不太好,有没有什么方法,list还是list的?我原来取三个出来可以完全不相同,但现在取六个,那排列组合的次数就多了许多了
sxnucseven 2006-12-05
  • 打赏
  • 举报
回复
50取6 重复不会很多,所以这个就行了,不用修改原来的list。
private List<String> getRadomString(){
List<String> newList=new Vector<String>();
int i=0;
String str="";
Radom rd=new Radom();
while(true){
if(i==6){
return newList;
}
str=list.get(rd.nextInt(50));
if(!newList.contain(str)){
newList.add(str);
i++;
}
}
}
现写的,或许有语法错误。
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧