Oops there was a typo in my suggested Set::AtRandom
 
Here's the one I'm actually using:
 
atRandom: aGenerator
 "Answer a random element of the receiver.  Uses aGenerator which
 should be kept by the user in a variable and used every time. Use
 this instead of #atRandom for better uniformity of random numbers
 because only you use the generator.  Causes an error if self has no
 elements."
 | ind entry |
 entry _ nil.
 [entry == nil] whileTrue: [
      self emptyCheck.
      ind _ aGenerator nextInt: array size.
      entry _ array at: ind.
 ].
 ^entry.