¿La mejor manera de elegir un subconjunto aleatorio de una colección?

Tengo un conjunto de objetos en un Vector del cual me gustaría seleccionar un subconjunto aleatorio (por ejemplo, 100 elementos que regresan; elija 5 al azar). En mi primer paso (muy apresurado) hice una solución extremadamente simple y quizás demasiado inteligente:

Vector itemsVector = getItems();

Collections.shuffle(itemsVector);
itemsVector.setSize(5);

Si bien esto tiene la ventaja de ser agradable y simple, sospecho que no se escalará muy bien, es decir, que Collections.shuffle () debe ser O (n) como mínimo. Mi alternativa menos inteligente es

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())));
}

¿Alguna sugerencia sobre mejores formas de extraer un subconjunto aleatorio de una Colección?

Respuestas a la pregunta(10)

Su respuesta a la pregunta