Podrías poner a las cartas una variable boolean disponible = true; y un método getDisponible y setDisponible. Y que cuando quieras tomar una carta haga if(disponible){ tomarCarta; setDisponible(false); }
El problema de esto es que cuando queden pocas cartas el proceso para mezclar una baraja o simplemente dar una carta aleatoria no repetida va a tardar mucho. Así que también podrías crear un ArrayList que contenga todas las cartas y que cuando te haya salido una de ellas la carta sea retirada del array creo que es con el método remove(), y que la multiplicación del número random haga -- para que el siguiente valor random esté dentro del rango de la lista.
Esto es todo lo que se me ocurre así de primeras

...
Sé bueno.