Печать всех пар ключ / значение в Java ConcurrentHashMap
Я пытаюсь просто распечатать все пары ключ/значение в ConcurrentHashMap.
Я нашел этот код в интернете, который, как я думал, сделает это, но, похоже, он получает информацию о ведрах/хэш-коде. На самом деле, честно говоря, вывод довольно странный, возможно, моя программа неверна, но я сначала хочу убедиться, что эта часть-то, что я хочу использовать.
for (Entry<StringBuilder, Integer> entry : wordCountMap.entrySet()) {
String key = entry.getKey().toString();
Integer value = entry.getValue();
System.out.println("key, " + key + " value " + value);
}
Это дает выход для около 10 различных ключей, с подсчетами, которые кажутся суммой количество вставок в карты.
6 ответов
Я проверил ваш код и работает правильно. Я добавил небольшую демонстрацию с другим способом печати всех данных на карте:
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
for (String key : map.keySet()) {
System.out.println(key + " " + map.get(key));
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey().toString();
Integer value = entry.getValue();
System.out.println("key, " + key + " value " + value);
}
HashMap имеет forEach
как часть своей структуры. Вы можете использовать это с лямбда-выражением, чтобы распечатать содержимое в одной строке, например:
map.forEach((k,v)-> System.out.println(k+", "+v));
вы можете сделать что-то вроде
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next().toString();
Integer value = map.get(key);
System.out.println(key + " " + value);
}
здесь "карта" - это ваш параллельный HashMap.
//best and simple way to show keys and values
//initialize map
Map<Integer, String> map = new HashMap<Integer, String>();
//Add some values
map.put(1, "Hi");
map.put(2, "Hello");
// iterate map using entryset in for loop
for(Entry<Integer, String> entry : map.entrySet())
{ //print keys and values
System.out.println(entry.getKey() + " : " +entry.getValue());
}
//Result :
1 : Hi
2 : Hello
на ConcurrentHashMap
очень похоже на HashMap
класс, за исключением того, что ConcurrentHashMap
предлагает внутренне поддерживали параллелизма. Это означает, что вам не нужно иметь синхронизированные блоки при доступе ConcurrentHashMap
в многопоточном приложении.
чтобы получить все пары ключ-значение в ConcurrentHashMap
ниже код, который похож на ваш код прекрасно работает:
//Initialize ConcurrentHashMap instance
ConcurrentHashMap<String, Integer> m = new ConcurrentHashMap<String, Integer>();
//Print all values stored in ConcurrentHashMap instance
for each (Entry<String, Integer> e : m.entrySet()) {
System.out.println(e.getKey()+"="+e.getValue());
}
вышеуказанный код разумно действителен в многопоточной среде в вашем приложении. Причина, я говорю "разумно обоснованная" это то, что выше кода еще обеспечивает потокобезопасность, но все же может снизить производительность приложения.
надеюсь, это поможет вам.
работа 100% уверен, попробуйте этот код для get all HashMap key и value
static HashMap<String, String> map = new HashMap<>();
map.put("one" " a " );
map.put("two" " b " );
map.put("three" " c " );
map.put("four" " d " );
просто вызовите этот метод, когда вы хотите показать значение HashMap
private void ShowHashMapValue() {
/**
* get the Set Of keys from HashMap
*/
Set setOfKeys = map.keySet();
/**
* get the Iterator instance from Set
*/
Iterator iterator = setOfKeys.iterator();
/**
* Loop the iterator until we reach the last element of the HashMap
*/
while (iterator.hasNext()) {
/**
* next() method returns the next key from Iterator instance.
* return type of next() method is Object so we need to do DownCasting to String
*/
String key = (String) iterator.next();
/**
* once we know the 'key', we can get the value from the HashMap
* by calling get() method
*/
String value = map.get(key);
System.out.println("Key: " + key + ", Value: " + value);
}
}