У меня возникла эта проблема. Мне нужно вернуть ключ в hashmap с наибольшим значением, трюк здесь в том, что метод должен учитывать сценарии краевого случая. Я могу использовать только указанные выше импорт, поэтому Map.Entry не допускается. Collections.sort нет и т. Д. Спасибо.Java-сборка case case hashmap
ответ
Решение действительно неэффективно, но если вы не можете добавить какие-либо другие импортеры ... он работает. Первый шаг, чтобы найти максимальное значение среди целых чисел, а затем для каждого из ключей, проверить, если map.get(key).equals(max)
:
public static String findLargest(HashMap<String, Integer> map) {
//step 1
int max = Integer.MIN_VALUE;
for (int i : map.values()) {
max = Math.max(max, i);
}
//step 2
for (String str : map.keySet()) {
if (map.get(str).equals(max)) {
return str;
}
}
return null;
}
Вы можете сделать это за один проход, если вы сами прокрутите запись. –
Что делать, если каждое число отрицательно? Тогда вы будете искать max, который даже не существует на карте. – Tom
Мне нравится решение, но я не разбираюсь в этих случаях, я знаю, что это такое. «Было исключение: java.lang.AssertionError« – Shifty
Похоже на HW. Итак, что вы пробовали и где вы застряли? Не могли бы вы отправить код, который компилируется? –
Первое, что нужно сделать: узнать значение пробела, чтобы сделать ваш код более удобочитаемым. Далее, даже без импорта, вы все равно можете использовать «Map.Entry». Затем, что вы хотите сделать, если есть несколько ключей для одного и того же значения? Или вообще нет ценностей? (Это краевые случаи, о которых я бы подумал ...) –
Я предполагаю, что это домашнее задание, так как в противном случае импорт довольно дешевый :). Подсказка: какие крайние случаи (случаи на грани между одним решением и другим), как вы думаете, о чем учитель говорит? – flup