There are two methods here: Random Pick, and Shuffle.
Random Pick involves taking an ordered deck, picking a random card, and drawing that card from the deck.
Shuffle involves taking an ordered deck, picking a random card, and placing that card on top of the new deck, from which you will then draw cards directly.
In both cases, you're going to need to do at most N-1 random number calls, where N is the number of cards in the deck (when there's only one card, you don't need to call the RNG). However in the Random Pick case, you don't have to do those random calls all at once, and not only that, you might not even have to call the Random function N-1 times. If you only end up drawing the top 10 cards, that's only 10 random calls. Also, if you ever need to reshuffle the deck, you can just add the cards back to the deck and then go back to picking at random.
From an algorithmic efficiency perspective, Random Pick is the clear superior choice.
Shuffle the deck anyway.
Here's the thing: You're not trying to pick a random item from a sequence, you're trying to shuffle a deck of cards. Work with the abstraction that matches your design, and deviate from that only when you need to. Hell, I'd almost recommend using a Stack
instead of a List
simply because it best matches the basic structure of a deck of cards slightly better. But a list might serve you better if you plan to manipulate the deck a lot.
Also, consider this: Random Pick assumes your entire deck is shuffled. You may not always want your entire deck to be shuffled. You may want to explicitly place cards on the top or bottom or in the middle of your deck. It's going to be much harder to do these things if you're trying to get clever with algorithms.