najlepszy sposób na wybranie losowego podzbioru z kolekcji?
Mam zestaw obiektów w wektorze, z którego chciałbym wybrać losowy podzbiór (np. 100 przedmiotów wraca; wybierz 5 losowo). W moim pierwszym (bardzo pochopnym) zdaniu zrobiłem niezwykle proste i być może zbyt sprytne rozwiązanie:
Vector itemsVector = getItems();
Collections.shuffle(itemsVector);
itemsVector.setSize(5);
Chociaż ma to tę zaletę, że jest ładne i proste, podejrzewam, że nie będzie bardzo dobrze skalowane, tj. Collections.shuffle () musi być przynajmniej O (n). Moja mniej mądra alternatywa to
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())));
}
Wszelkie sugestie dotyczące lepszych sposobów na wylosowanie podzbioru losowego z kolekcji?