Map with case insensitive get, remove and containsKey
You can't do that with HashMap. Use a TreeMap instead:

new TreeMap&lt;String, String&gt;(String.CASE_INSENSITIVE_ORDER)


For highly concurrent version, use ConcurrentSkipListMap:

new ConcurrentSkipListMap&lt;String, String&gt;(String.CASE_INSENSITIVE_ORDER)


Since you don't care about actual ordering, the String.CASE_INSENSITIVE_ORDER is fine for this. If locale-sensitive ordering is required, you need to supply a Collator instead, e.g.

Collator.getInstance(Locale.forLanguageTag("es-ES"))