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

从java中的结果集中获取随机子集,java,random,set,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

我有一套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;
            }
int size=memberSet.size();
Set randomSet=新的HashSet();
int item=new Random().nextInt(大小);
int i=0;
for(成员mbr:memberSet)
{
如果(i==项目){
随机集。添加(mbr);
}
i=i+1;
}
列表列表=新建链接列表(成员集);
集合。洗牌(列表);
Set randomSet=newhashset(list.subList(0,5));

完整示例:

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;
    }
}
publicstaticvoidmain(字符串…参数){
Set memberSet=新的HashSet();
对于(int i=0;i<100;i++)
成员集。添加(新成员(i));
列表=新链接列表(成员集);
集合。洗牌(列表);
Set randomSet=newhashset(list.subList(0,5));
系统输出打印项次(随机集);
}
静态类成员{
最终整数值;
公共成员(int值){
这个值=值;
}
@凌驾
公共字符串toString(){
返回“”+值;
}
}

虽然@dacwe解决方案好得多,但我还是忍不住开了一个玩笑,我只是想说一句“放一个”(int i=0;iDup?see看起来像是一个副本,但提供的链接将允许您仅返回一个随机对象。用户可能想要一个返回一组N个对象的解决方案。但问题有点不清楚。->@aix是的,看起来像是一个匹配项:DSorry用于我的英语,但是的,我希望在随机子集中获得多个项,并且没有一个qu你链接我的estions回答了我的问题。谢谢,这正是我所需要的。清晰而简单!只是一个小细节:使用
ArrayList
而不是
LinkedList
,效率会更高。洗牌
LinkedList
将迫使Java创建一个临时数组,洗牌,然后将内容放回
LinkedList
。当使用
ArrayList
时,它将就地完成。
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;
    }
}