Печать HashMap в Java - PullRequest
       0

Печать HashMap в Java

90 голосов
/ 07 мая 2011

У меня есть HashMap:

private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();

Теперь я хотел бы просмотреть все значения и распечатать их.

Я написал это:

for (TypeValue name : this.example.keySet()) {
    System.out.println(name);
}

Кажется, что это не работает.

В чем проблема?

РЕДАКТИРОВАТЬ: Другой вопрос: основана ли эта коллекция на нуле?Я имею в виду, если он имеет 1 ключ и значение будет равным 0 или 1?

Ответы [ 15 ]

96 голосов
/ 07 мая 2011

keySet () возвращает только набор ключей из вашей хеш-карты, вы должны выполнить итерацию этого набора ключей и получить значение из хеш-карты, используя эти ключи.

В вашем примеретип ключа хеш-карты TypeKey, но вы указали TypeValue в своем общем цикле for, поэтому его нельзя скомпилировать.Вы должны изменить его на:

for (TypeKey name: example.keySet()){
            String key = name.toString();
            String value = example.get(name).toString();  
            System.out.println(key + " " + value);  
} 

Обновление для Java8:

 example.entrySet().forEach(entry->{
    System.out.println(entry.getKey() + " " + entry.getValue());  
 });

Если вам не нужно печатать значение ключа и просто нужнозначение hashmap, вы можете использовать предложения других.

Другой вопрос: является ли эта коллекция нулевой базой?Я имею в виду, если он имеет 1 ключ и значение, будет ли его размер 0 или 1?

Коллекция, возвращаемая из keySet(), является Set . Вы не можете получить значение изУстанавливается с использованием индекса, поэтому вопрос не в том, является ли он нулевым или единичным.Если в вашем хэш-файле есть один ключ, возвращаемая keySet () будет иметь одну запись внутри, а ее размер будет равен 1.

75 голосов
/ 03 ноября 2015

Простой способ просмотра пар ключ-значение:

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
System.out.println(Arrays.asList(map)); // method 1
System.out.println(Collections.singletonList(map)); // method 2

И метод 1, и метод 2 выводят это:

[{b=2, a=1}]
36 голосов
/ 12 июня 2013

Если у вас есть Map<KeyType, ValueType>, вы можете напечатать его так:

for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
    System.out.println(entry.getKey()+" : "+entry.getValue());
}
13 голосов
/ 20 октября 2014

Чтобы напечатать ключ и значение, используйте следующее:

for (Object objectName : example.keySet()) {
   System.out.println(objectName);
   System.out.println(example.get(objectName));
 }
13 голосов
/ 07 мая 2011

У вас есть несколько вариантов

  • Получить map.values(), который получает значения, а не ключи
  • Получите map.entrySet(), который имеет оба
  • Получите keySet() и для каждого ключевого вызова map.get(key)
9 голосов
/ 07 мая 2011

Вы хотите установить значение, а не набор ключей:

for (TypeValue name: this.example.values()) {
        System.out.println(name);
}

Код, который вы дадите, даже не скомпилируется, что, возможно, стоит упомянуть в будущих вопросах - «похоже, не работает»немного расплывчато!

7 голосов
/ 20 февраля 2015

Стоит упомянуть подход Java 8, использующий BiConsumer и лямбда-функции:

BiConsumer<TypeKey, TypeValue> consumer = (o1, o2) -> 
           System.out.println(o1 + ", " + o2);

example.forEach(consumer);

Предполагается, что при необходимости вы переопределили toString метод двух типов.

4 голосов
/ 21 января 2015

Я сделал это с помощью String Map (если вы работаете с String Map).

for (Object obj : dados.entrySet()) {
    Map.Entry<String, String> entry = (Map.Entry) obj;
    System.out.print("Key: " + entry.getKey());
    System.out.println(", Value: " + entry.getValue());
}
3 голосов
/ 16 ноября 2017

Простой оператор print с именем переменной, содержащей ссылку на Hash Map, может сделать:

HashMap<K,V> HM = new HashMap<>(); //empty
System.out.println(HM); //prints key value pairs enclosed in {}

Это работает, потому что метод toString() уже переопределен в AbstractMap class, который расширен на HashMap Class Больше информации из документации

Возвращает строковое представление этой карты. Строковое представление состоит из списка отображений значения ключа в порядке, возвращенном итератором представления entrySet карты, заключенным в фигурные скобки ("{}"). Смежные сопоставления разделены символами "," (запятая и пробел). Каждое сопоставление значения ключа отображается как ключ, за которым следует знак равенства ("="), за которым следует соответствующее значение. Ключи и значения преобразуются в строки как String.valueOf (Object).

3 голосов
/ 29 августа 2016

Java 8 новая функция forEach стиль

import java.util.HashMap;

public class PrintMap {
    public static void main(String[] args) {
        HashMap<String, Integer> example = new HashMap<>();
        example.put("a", 1);
        example.put("b", 2);
        example.put("c", 3);
        example.put("d", 5);

        example.forEach((key, value) -> System.out.println(key + " : " + value));

//      Output:
//      a : 1
//      b : 2
//      c : 3
//      d : 5

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...