Executing the following code:
public class Main {
    public static void main(String[] args) {
        Util util = new Util();
        util.addBlock(1);
        util.addBlocks(util.getBlocks());
    }
}
public class Util {
    public static HashMap<Long, Integer> blockMap = new HashMap<>();
    private Gson gson = new Gson();
    public void addBlocks(String json){
        Map map = gson.fromJson(json, Map.class);
        blockMap.putAll(map);
        System.out.println(blockMap.keySet());
    }
    public void addBlock(int i){
        blockMap.put(0L, i);
    }
    public String getBlocks(){
        return gson.toJson(blockMap);
    }
}
I get the output
[0, 0]
from the print System.out.println(blockMap.keySet());.
So, for some reason, I have a Map<Long, Integer> that contains two Longs with value 0 as key. And a keyset Set<Long> with two 0s. But map and set do not allow duplicate keys, how is this possible?
The code first adds a simple entry to the map:
blockMap.put(0L, i);
Then, I add another entry by converting the map to a JSON string, using GSON and then back to a map:
gson.toJson(blockMap);
...
Map map = gson.fromJson(json, Map.class);
blockMap.putAll(map);
I would expect that it overwrites the previous entry and not adds another entry with the same, duplicate, key.
 
     
     
    