2015-06-26 2 views
0

Возможно ли, что я могу поместить значения непосредственно в ключ, имеет нулевые значения HashMap?Нулевые значения или ключи Java HashMap

Что я хочу, чтобы проверить, является ли значение одного ключа в HashMapnull, тогда я собираюсь его заполнить.

+1

Да, это возможно. –

+0

Карта Ключи не являются значениями карты. В то время как допустимо, обычно не было бы «ставить нулевое значение» (как это обычно не было бы на карте, чтобы начать с!), И на карте есть не более одного «нулевого ключа» (что одинаково). – user2864740

+0

@tuturyokgaming вы просто ищете, как найти ключ, который имеет нулевое значение, а затем поставить там значение? да, было бы довольно легко сделать это. сообщите мне, и я отправлю код для этого. – Nirmal

ответ

0

Если map.get(key) возвращает null, вы знаете, что либо ключ отсутствует на Карте, либо присутствует и имеет нулевое значение.

Чтобы различать два:

if (map.containsKey(key)) { 
    if (map.get(key) == null) { 
     // key is present and has null value 
    } 
} else { 
    // key is not present in the Map 
} 
+0

Тогда как я могу заполнить нулевое значение или ключ? – tuturyokgaming

+0

@tuturyokgaming 'map.put (key, value)' – Eran

0

В дополнение к @Eran ответ, который я должен отметить, что наличие null значения в Map не рекомендуется. Во-первых, это не поддерживается каждой реализацией карты. Например, ConcurrentHashMap не поддерживает значения null, поэтому, если позже это Map будет передаваться по нескольким потокам, и вы решите перейти на ConcurrentHashMap, вы обнаружите, что вы не можете сделать это, не избавившись от нулей. Во-вторых, большинство новых методов API Java-8 getOrDefault, , computeIfAbsent не ведут себя дружелюбно с null значениями: обычно они предполагают, что значение null такое же, как и отсутствие значения. Наконец, обработка значений null несколько медленнее, так как вам нужно дважды проверять одну и ту же клавишу (сначала через containsKey, второй через get).

Таким образом, в общем случае, если это возможно, вы должны избегать пустых значений в картах. Иногда можно ввести специальную константу, которая обозначает отсутствие значения. Это зависит от конкретной задачи.

+0

Да, сейчас мне нужно добавить значения null в ключ. Потому что я читаю текстовый файл и добавляю некоторые строки в arraylist и arraylist, которые будут добавлены к значению, но что происходит, я читаю строку и разбиваю ее на CSV. Итак, что я делаю, я сначала читаю все строки с запятой, а затем сохраняю их на ключ HashMap. Во-вторых, я храню его в arraylist и нужно поместить его в ключи с нулевым значением. Я использую JDK-6 – tuturyokgaming

0

Вот простейшая (может быть улучшена/проверена далее) полная программа. Он найдет key, и если соответствующее значение равно null, оно заменит этот нуль на вашNewValue.

import java.util.HashMap; 
import java.util.Map; 

public class SimpleMapKeyValue { 

    public static void main(final String[] args) throws Exception { 
     final Map<String, Integer> map = new HashMap<>(); 
     map.put("A", 5); 
     map.put("B", 10); 
     map.put("D", null); 
     map.put("E", 23); 

     int yourNewValue = 100; 

     for(Map.Entry<String, Integer> entry : map.entrySet()){ 
      if (entry.getValue() == null) { 
       map.put(entry.getKey(),yourNewValue); 
      } 
      System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
     } 
    } 
} 
Смежные вопросы