У меня есть набор объектов в векторе, из которых я хотел бы выбрать случайное подмножество (например, 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())));
}
Любые предложения по лучшим способам извлечения случайного подмножества из коллекции?