Печать HashMap в Java

У меня есть HashMap:

private HashMap example= new HashMap(); 

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

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

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

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

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

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

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

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

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

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

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

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

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

 Map 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}] 

Предполагая, что у вас есть Map , вы можете ее напечатать следующим образом:

 for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey()+" : "+entry.getValue()); } 

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

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

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

 for(Object objname:example.keySet()) { System.out.println(objname); System.out.println(example.get(objname); } 

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

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

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

Стоит упомянуть подход Java 8, используя функции BiConsumer и lambda:

 BiConsumer consumer = (o1, o2) -> System.out.println(o1 + ", " + o2); example.forEach(consumer); 

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

Я сделал это, используя карту String (если вы работаете со String Map).

 for (Object obj : dados.entrySet()) { Map.Entry entry = (Map.Entry) obj; System.out.print("Key: " + entry.getKey()); System.out.println(", Value: " + entry.getValue()); } 

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

 import java.util.HashMap; public class PrintMap { public static void main(String[] args) { HashMap 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 } } 

Простой оператор печати с именем переменной, который содержит ссылку на Hash-карту, будет делать следующее:

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

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

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

Если карта содержит коллекцию как значение, другие ответы требуют дополнительных усилий для их преобразования в виде строк, таких как Arrays.deepToString(value.toArray()) (если это карта значений списка) и т. Д.

Я часто сталкивался с этими проблемами и сталкивался с общей функцией для печати всех объектов с помощью ObjectMappers . Это очень удобно во всех местах, особенно во время экспериментов, и я бы рекомендовал вам выбрать этот способ.

 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; public static String convertObjectAsString(Object object) { String s = ""; ObjectMapper om = new ObjectMapper(); try { om.enable(SerializationFeature.INDENT_OUTPUT); s = om.writeValueAsString(object); } catch (Exception e) { log.error("error converting object to string - " + e); } return s; } 

Вы можете использовать class Entry чтобы легко читать HashMap .

 for(Map.Entry temp : example.entrySet()){ System.out.println(temp.getValue()); // Or something as per temp defination. can be used } 
  • C # Сортировка коллекции, которая позволяет дублировать ключи
  • Как создать новый список на Java
  • Какова наиболее эффективная библиотека compilationов Java?
  • Коллекции. Сорт с несколькими полями
  • Java Collections.shuffle делает что?
  • Что более эффективно, для каждого цикла или для iteratorа?
  • Как я могу инициализировать ArrayList со всеми нулями в Java?
  • Как сортировать коллекцию?
  • Добавить несколько элементов в уже инициализированный arraylist в java
  • Резервный список
  • Как клонировать ArrayList, а также клонировать его содержимое?
  • Interesting Posts

    Настройка домашней страницы в Firefox только при первом открывшемся окне

    Неуправляемые функции оптимизируются?

    Каков наилучший способ реализации `next` и` previous` в типе enums?

    Как перезагрузить компьютеры в локальной сети, зная только внешний IP-адрес?

    Как сделать разбиение на страницы в ASP.NET MVC?

    Петля через объекты в C #

    Как быстро переименовать базу данных MySQL (изменить имя схемы)?

    Что такое x после «x = x ++»?

    Может ли сшивка usb использоваться для многопользовательской игры?

    Получение 100 лучших номеров из ста миллионов номеров

    «Введенный ключ продукта не соответствует ни одному из изображений Windows»

    Что является результатом NULL + int?

    Мониторинг вызовов приложений в DLL

    Преобразование файла в PDF с помощью LibreOffice под пользователем apache (т.е. при использовании PHP)

    Отправить уведомления на рабочем столе в Chrome или Firefox из закрытого веб-приложения?

    Давайте будем гением компьютера.