Obtén X números únicos de un conjunto

¿Cuál es la forma más elegante de obtener números aleatorios únicos que considero?

En este momento necesito números únicos aleatorios, verifico si no es único usando un ciclo while para ver si he usado el número aleatorio antes.

Entonces se ve así:

int n = getRandomNumber % [Array Size];

for each ( Previously used n in list)
    Check if I've used n before, if I have...try again.

Hay muchas formas de resolver este problema lineal de O (n / 2), solo me pregunto si hay una forma elegante de resolverlo. Tratando de pensar en MATH115 Matemáticas discretas y recordar si el viejo profesor cubrió algo relacionado con un problema aparentemente trivial.

No puedo pensar en este momento, así que tal vez una vez que tome un poco de cafeína, mi cerebro lo detendrá con el elevado coeficiente intelectual inducido por el café.