As entries are added to the map, keys hash values are lowercase hash codes of the key. the
Real key case is preserved.

The keySet() method returns all keys in their original case

Note that CaseInsensitiveMap is not synchronized and is not thread-safe.
If you wish to use this map from multiple threads concurrently, you must use
appropriate synchronization. The simplest approach is to wrap this map
using Collections.synchronizedMap(Map). This class may throw
exceptions when accessed by concurrent threads without synchronization.