У меня есть HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Теперь я хотел бы просмотреть все значения и распечатать их.
Я написал это:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Похоже, это не работает.
В чем проблема?
РЕДАКТИРОВАТЬ: Другой вопрос: эта коллекция основана на нуле? Я имею в виду, что если у него 1 ключ и значение, размер будет 0 или 1?
java
collections
Неизвестный пользователь
источник
источник
Map
' : «Возвращает количество сопоставлений« ключ-значение »в этой карте. Если карта содержит более элементов, возвращается ».size()
Integer.MAX_VALUE
Integer.MAX_VALUE
Ответы:
keySet () возвращает только набор ключей из вашей хэш-карты, вы должны повторить этот набор ключей и получить значение из хэш-карты, используя эти ключи.
В вашем примере тип ключа хэш-карты - это
TypeKey
, но вы указалиTypeValue
в своем универсальном цикле for, поэтому его нельзя скомпилировать. Вы должны изменить его на:Обновление для Java8:
Если вам не нужно печатать значение ключа, а просто нужно значение хэш-карты, вы можете использовать предложения других.
Коллекция вернулась из
keySet()
является набор .Вы не может получить значение из набора с помощью индекса, так что это не вопрос о том, является ли он с нуля или один основе. Если ваша хэш-карта имеет один ключ, возвращаемый keySet () будет иметь внутри одну запись, и ее размер будет равен 1.источник
for (Map.Entry<String, String> entry : map.entrySet()) { ... }
example.forEach((key, value) -> System.out.println("key + " | " + value));
Простой способ увидеть пары ключ-значение:
И метод 1, и метод 2 выводят это:
источник
System.out.println(map);
вывод:{b=2, a=1}
System.out.println(map.toString());
.toString
возможности избегаю .Предполагая, что у вас есть
Map<KeyType, ValueType>
, вы можете распечатать его так:источник
Чтобы распечатать ключ и значение, используйте следующее:
источник
У вас есть несколько вариантов
map.values()
, который получает значения, а не ключиmap.entrySet()
котором есть обаkeySet()
и для каждого ключевого вызоваmap.get(key)
источник
Вам нужно установить значение, а не набор ключей:
Код, который вы даете, даже не компилируется, что, возможно, стоит упомянуть в будущих вопросах - «похоже, не работает» немного расплывчато!
источник
Стоит упомянуть подход Java 8, использующий
BiConsumer
и лямбда-функции:Предполагая, что вы
toString
при необходимости переопределили методы двух типов.источник
Для меня эта простая строка сработала хорошо:
источник
Простая инструкция печати с именем переменной, которая содержит ссылку на хэш-карту, будет делать:
Это работает, потому что
toString()
метод уже переопределен вAbstractMap class
расширенииHashMap Class
Дополнительная информация из документацииисточник
Новый
forEach
стиль функций Java 8источник
Я сделал это с помощью карты строк (если вы работаете с картой строк).
источник
Использование функций java 8
источник
Полезно для быстрой печати записей в HashMap
источник
Если карта содержит коллекцию как значение, другие ответы требуют дополнительных усилий для преобразования их в строки, например
Arrays.deepToString(value.toArray())
(если это карта значений списка) и т. Д.Я сталкивался с этими проблемами довольно часто и наткнулся на универсальную функцию для печати всех объектов, использующих
ObjectMappers
. Это очень удобно во всех местах, особенно во время экспериментов, и я бы рекомендовал вам выбрать этот способ.источник
Вы можете использовать
Entry
класс, чтобыHashMap
легко читать .источник