One way to deal with those gaps would be to “draw again” when you get an unoccupied integer.
The efficiency of that approach is going to depend on how often elements get deleted; lots of churn will make for lots of retries. How common are deletes in your application?






















