Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 293
Hicham Moustaid Avatar asked May 31 '15 07:05

Hicham Moustaid


2 Answers

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.

like image 190
Eran Avatar answered Oct 23 '22 00:10

Eran


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.

like image 2
GhostCat Avatar answered Oct 23 '22 00:10

GhostCat