Печать 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 } 
  • Тематические коллекции в .NET.
  • Почему мой код Entity Framework Code First proxy null и почему я не могу его установить?
  • Java 8 Различают по свойству
  • Что более эффективно, для каждого цикла или для iteratorа?
  • Коллекция и List , что вы должны использовать на своих интерфейсах?
  • Сортировка коллекции Java
  • .NET - конвертировать общую коллекцию в DataTable
  • Как инициализировать значения HashSet по построению?
  • Пересечение java.util.Map
  • Как подсчитать количество вхождений элемента в список
  • Выберите N случайных элементов из списка в C #
  • Interesting Posts

    Объединение вектора строк / символа

    Как отправить электронное письмо с терминала?

    В чем причина использования двойного указателя при добавлении узла в связанный список?

    Как сохранить горизонтальную позицию курсора во время прокрутки в VIM?

    Как вставить pg_backend_pid из postgresql в сценарий оболочки и передать его другому процессу?

    Пользовательское расширение стилей для каждого сайта для Firefox

    UIWebView: когда страница действительно заканчивала загрузку?

    как я могу обновить несколько документов в мангусте

    Что такое Microsoft Visual Studio, эквивалентная опции GCC ld – whall-archive

    Восстановить неполные (?) Видеофайлы

    Как исправить ошибку загрузчика Windows XP, когда BOOTCFG, FIXBOOT и FIXMBR ничего не делают?

    Команда MSG в Windows 7

    Что такое Chrome Canary и как он отличается от Google Chrome?

    HTML5: dragover (), drop (): как получить текущие координаты x, y?

    Как моделировать систему голосования «любит» с помощью MongoDB

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