+ redef var keys: RemovableCollection[K] = new HashMapKeys[K, V](self)
+ redef var values: RemovableCollection[V] = new HashMapValues[K, V](self)
+end
+
+# View of the keys of a HashMap
+private class HashMapKeys[K, V]
+ super RemovableCollection[K]
+ # The original map
+ var map: HashMap[K, V]
+
+ redef fun count(k) do if self.has(k) then return 1 else return 0
+ redef fun first do return self.map._first_item._key
+ redef fun has(k) do return self.map.node_at(k) != null
+ redef fun has_only(k) do return (self.has(k) and self.length == 1) or self.is_empty
+ redef fun is_empty do return self.map.is_empty
+ redef fun length do return self.map.length
+
+ redef fun iterator do return new MapKeysIterator[K, V](self.map.iterator)
+
+ redef fun clear do self.map.clear
+
+ redef fun remove(key) do self.map.remove_node(key)
+ redef fun remove_all(key) do self.map.remove_node(key)
+end