从java中的结果集中获取随机子集

Kév*_*ard 7 java random set

我有一组100个对象.如何从这个集合中获取5个对象的子集?

我现在正在这样做,但它只返回一个对象

          int size = memberSet.size();
      Set<Member> randomSet = new HashSet<Member>();
            int item = new Random().nextInt(size);
            int i = 0;
            for(Member mbr : memberSet)
            {
                if (i == item){
                    randomSet.add(mbr);
            }
                i = i + 1;
            }
Run Code Online (Sandbox Code Playgroud)

dac*_*cwe 17

List<Member> list = new LinkedList<Member>(memberSet);
Collections.shuffle(list);
Set<Member> randomSet = new HashSet<Member>(list.subList(0, 5));
Run Code Online (Sandbox Code Playgroud)

完整示例:

public static void main(String... args) {

    Set<Member> memberSet = new HashSet<Member>();
    for (int i = 0; i < 100; i++)
        memberSet.add(new Member(i));

    List<Member> list = new LinkedList<Member>(memberSet);
    Collections.shuffle(list);
    Set<Member> randomSet = new HashSet<Member>(list.subList(0, 5));

    System.out.println(randomSet);
}

static class Member {
    final int value;
    public Member(int value) {
        this.value = value; 
    }
    @Override
    public String toString() {
        return "" + value;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 非常好.< - 愚蠢的15char规则的填充 - > (3认同)
  • 只是一个小细节:使用`ArrayList`而不是`LinkedList`会更有效率.改组`LinkedList`将迫使Java创建一个临时数组,将其洗牌,然后将其放回到`LinkedList`中.使用`ArrayList`时,它将在适当的位置完成. (3认同)