Вот альтернативное решение, рассчитанное на скорость.
Назовите ваш оригинальный HashMap a
. Есть второй HashMap<String, Integer> aCount
. На хэш-карте aCount
будет храниться подсчет количества каждого значения в вашей исходной хеш-карте.
Каждый раз, когда вы вставляете ключ k
и значение v
в первый HashMap
, проверьте, если aCount.containsKey(v)
. Если это так, то увеличьте значение: aCount.put(v, aCount.get(v) + 1)
. В противном случае добавьте новую запись: aCount.put(v, 1)
.
Каждый раз, когда вы удаляете ключ k
и значение v
из первого HashMap
, проверьте счет с помощью aCount.get(v)
. Если число больше единицы, используйте aCount.put(v, aCount.get(v) - 1)
, чтобы уменьшить его. В противном случае (т. Е. Количество точно равно одному) используйте aCount.remove(v)
.
Тогда вам нужно всего лишь позвонить по номеру aCount.contains(v)
, чтобы узнать, есть ли указанное значение в вашей HashMap a
.
Зачем все это? Потому что таким образом, вместо того, чтобы иметь время запроса O (n), чтобы выяснить, существует ли значение в вашем HashMap, вы получаете время O (1). Если это ценно для вас, то вышеприведенное решение будет работать. Если это не имеет значения для вас, вы можете легко использовать ответ Майка Льюиса.