Unsupported add/addAll operations for Map<K,V>.keySet()

2.1k Views Asked by At

Regarding the Map<K,V> interface:

Why does keySet() return a Set that supports the remove operation but doesn't support add() and addAll() operations?

3

There are 3 best solutions below

1
On BEST ANSWER

The Set returned by keySet is backed by the Map, so changes to the map are reflected in the set, and vice-versa. This means that calling remove on that Set removes the matching Entry from the Map.

It would make no sense to call add or addAll on that Set, since you can't add key[s] without corresponding value[s] to the Map.

0
On

Think about what you are asking for:

you want to retrieve all KEYS of a map (and that set is not a "copy" of the keys; it represents the keys of the map).

And then you ask to add elements to those KEYS. In other words: the "data set" you are looking at has the semantic meaning of keys coming from a map. And you want to increase that "data set" - but without providing the corresponding entries for that map.

Deletion on the other hand is straight forward; deleting a key will also delete the corresponding entry from the map.

0
On

It's because each key in the set is linked to a value in the map. Removing a key will remove the associated value, but to add you'll need a value and not just a key.