HashMap ведет себя странно

#java #hashmap

#java #hashmap

Вопрос:

 import java.io.*;
import java.util.*;
class Solution {
    public static void main (String[] args) {
        HashMap<Integer, Integer> map = new HashMap<>();
        long sq = 16;
        int v = 8, u = 2;
        int ans = 0;
        map.put(u, map.getOrDefault(u, 0)   1);
        ans  = map.getOrDefault(sq/v, 0);
        
        System.out.println(ans);
    }
}
  

Ответ должен быть явно 1, но он выводит 0.
Есть идеи, почему он так себя ведет?
Или я что-то упускаю?

Ответ №1:

sq/v делится long на int , поэтому результатом является a long , который вставляется в Long при передаче в map.getOrDefault(sq/v,0) . У вас нет Long ключей в вашем Map , поэтому он возвращает значение по умолчанию 0 .

Если вы измените sq на int , результат sq/v также будет int , и map.getOrDefault(sq/v,0) вернет 1.

Ответ №2:

Карта хочет ввести java.lang.Целое число как ключ

Измените на это:

 ans  = map.getOrDefault(Integer.valueOf((int) (sq/v)), 0);
  

Примечание: примитивный тип данных int также будет работать.

Это также будет работать:

 ans  = map.getOrDefault((int) (sq/v), 0);