list里面取随机几个对象问题 现有一个list,里面取的是一个个的String对象,这个list.size=50,我想从里面随机取出六个String对象,但不能重复,请问各位有没有什么好的办法?代码尽是要简洁一点的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for(int i =0;i<6;i++){Random rd=new Random(); k=rd.nextInt(50);str[i]=list.get(k);list.remove(k);} 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++; }}}现写的,或许有语法错误。 楼上的,我觉得这个方法好像不太好,有没有什么方法,list还是list的?我原来取三个出来可以完全不相同,但现在取六个,那排列组合的次数就多了许多了 用linklist,取到一个删除一个。50-1 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(哈罗DayDayUp) 你的办法行得通哈!!不错哦~! Set set = new HashSet();Random rd=new Random();int k;while (set.size()<6){ k=rd.nextInt(50); set.add(list.get(k));} 注意list里面也可能有重复对象啊 拷贝到另外一个list里面去删副本就是了 zhh1981(**的猪头) 写的那个就没有问题。 zhh1981是对的今天刚答完一个人的问题,Random不可以在for循环里面new而且Set的效率要高 sxnucseven(SC=>CS=>KOF=>O2JAM=>CSDN)(我进步了吗?) 楼上的,如果第一次把第50个取出来了,第二次又随到第50个会出现什么状况阿?to zhh1981(**的猪头) sxnucseven 这位兄弟说的你考虑下啊 haisenmai(我应该做得到) 第二次答案为正解 我那样写就是为了改变原来的list lz给的只是list接口 具体实现可能不知道,不知道具体实现类是不能用copy()的,所以只能县创建另一个arrylist或者linkedlist或者vector,不管哪个还得把以前的list中的string一个一个加近来,多麻烦,50取6重复取得概率不大,所以就用循环加判断了。 哦 写错了 是不改变原来的List Set是不能加重复的,你的LIST里本身里面也有可能重复的 if(!newList.contain(str)){ newList.add(str); i++; }这个判断已经去掉重复了。 Swing:为什么repaint()并没有调用paintComponent方法 如何把IE浏览器快速变成灰色来哀悼在汶川地震中遇难的同胞们! 请问什么是方法签名? 大家好,有个炸弹,麻烦各位排一下 关于文件查询的2种方法的问题 系统命令问题: jdk有无提供现成方法,从生日(Date)获得年龄(精确周岁)? 怎么把string类型的数组转换成double类型的数组? 谁会自己在手机上写java游戏? getName()==null ???? 急! poi做Excel在合并单元格后如何加边框 有想在上海找J2EE软件开发工作的请与我联系.
Random rd=new Random();
k=rd.nextInt(50);
str[i]=list.get(k);
list.remove(k);
}
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++;
}
}
}
现写的,或许有语法错误。
用linklist,取到一个删除一个。50-1
Random rd=new Random();
k=rd.nextInt(list.size);
str[i]=list.get(k);
list.remove(k);
}
Random rd=new Random();
int k;
while (set.size()<6){
k=rd.nextInt(50);
set.add(list.get(k));
}
楼上的,如果第一次把第50个取出来了,第二次又随到第50个会出现什么状况阿?
to
zhh1981(**的猪头) sxnucseven 这位兄弟说的你考虑下啊
lz给的只是list接口 具体实现可能不知道,不知道具体实现类是不能用copy()的,所以只能县创建另一个arrylist或者linkedlist或者vector,不管哪个还得把以前的list中的string一个一个加近来,多麻烦,50取6重复取得概率不大,所以就用循环加判断了。
newList.add(str);
i++;
}
这个判断已经去掉重复了。