1
class RandomizedCollection {2
List<Integer> multiSet;3
HashMap<Integer, PriorityQueue<Integer>> map;6
public RandomizedCollection() {8
multiSet = new ArrayList<>();12
public boolean insert(int val) {13
boolean contains = map.containsKey(val);15
PriorityQueue<Integer> pq;17
pq = new PriorityQueue<>(Collections.reverseOrder());19
} else pq = map.get(val);21
pq.add(multiSet.size() - 1);25
public boolean remove(int val) {26
if (!map.containsKey(val)) return false;28
PriorityQueue<Integer> pq = map.get(val);29
int indexToRemove = pq.poll();30
if (pq.size() == 0) map.remove(val);32
int lastIndex = multiSet.size() - 1;33
if (indexToRemove != lastIndex) {34
int valLast = multiSet.get(lastIndex);35
PriorityQueue<Integer> temp = map.get(valLast);37
temp.add(indexToRemove);38
multiSet.set(indexToRemove, valLast);40
multiSet.remove(lastIndex);44
public int getRandom() {45
int index = random.nextInt(multiSet.size());46
return multiSet.get(index);