现有一个list,里面取的是一个个的String对象,这个list.size=50,我想从里面随机取出六个String对象,但不能重复,请问各位有没有什么好的办法?代码尽是要简洁一点的

解决方案 »

  1.   

    for(int i =0;i<6;i++){
    Random rd=new Random();
      k=rd.nextInt(50);
    str[i]=list.get(k);
    list.remove(k);
    }
      

  2.   

    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.   

    楼上的,我觉得这个方法好像不太好,有没有什么方法,list还是list的?我原来取三个出来可以完全不相同,但现在取六个,那排列组合的次数就多了许多了
      

  4.   


    用linklist,取到一个删除一个。50-1
      

  5.   

    for(int i =0;i<6;i++){
    Random rd=new Random();
      k=rd.nextInt(list.size);
    str[i]=list.get(k);
    list.remove(k);
    }
      

  6.   

    xwj1003(哈罗DayDayUp) 你的办法行得通哈!!不错哦~!
      

  7.   

    Set set = new HashSet();
    Random rd=new Random();
    int k;
    while (set.size()<6){
      k=rd.nextInt(50);
      set.add(list.get(k));
    }
      

  8.   

    注意list里面也可能有重复对象啊
      

  9.   

    拷贝到另外一个list里面去删副本就是了
      

  10.   

    zhh1981(**的猪头) 写的那个就没有问题。
      

  11.   

    zhh1981是对的今天刚答完一个人的问题,Random不可以在for循环里面new而且Set的效率要高
      

  12.   

    sxnucseven(SC=>CS=>KOF=>O2JAM=>CSDN)(我进步了吗?) 
    楼上的,如果第一次把第50个取出来了,第二次又随到第50个会出现什么状况阿?
    to
       zhh1981(**的猪头)  sxnucseven  这位兄弟说的你考虑下啊
      

  13.   

    haisenmai(我应该做得到) 第二次答案为正解
      

  14.   

    我那样写就是为了改变原来的list  
    lz给的只是list接口 具体实现可能不知道,不知道具体实现类是不能用copy()的,所以只能县创建另一个arrylist或者linkedlist或者vector,不管哪个还得把以前的list中的string一个一个加近来,多麻烦,50取6重复取得概率不大,所以就用循环加判断了。
      

  15.   

    哦 写错了 是不改变原来的List
      

  16.   

    Set是不能加重复的,你的LIST里本身里面也有可能重复的
      

  17.   

    if(!newList.contain(str)){
        newList.add(str);
        i++;
      }
    这个判断已经去掉重复了。