我在Vector中有一组对象,我想从中选择一个随机子集(例如,返回100个项目;随机选择5个)。在我的第一遍(非常仓促)中,我做了一个非常简单甚至过于聪明的解决方案:
Vector itemsVector = getItems();
Collections.shuffle(itemsVector);
itemsVector.setSize(5);
尽管这样做的好处是简单易用,但我怀疑它的伸缩性不会很好,即Collections.shuffle()至少必须为O(n)。我不太聪明的选择是
Vector itemsVector = getItems();
Random rand = new Random(System.currentTimeMillis()); // would make this static to the class
List subsetList = new ArrayList(5);
for (int i = 0; i < 5; i++) {
// be sure to use Vector.remove() or you may get the same item twice
subsetList.add(itemsVector.remove(rand.nextInt(itemsVector.size())));
}
关于从集合中抽取随机子集的更好方法的任何建议?