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?

questionAnswers(10)

yourAnswerToTheQuestion