Case insensitive string as HashMap key

case-insensitive, dictionary, java

Solution

Map<String, String> nodeMap = 
    new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

That's really all you need.

Problem

I would like to use case insensitive string as a HashMap key for the following reasons. - During initialization, my program creates HashMap with user defined String - While processing an event (network traffic in my case), I might received String in a different case but I should be able to locate the `<key, value>` from HashMap ignoring the case I received from traffic. I've followed this approach CaseInsensitiveString.java ``` public final class CaseInsensitiveString { private String s; public CaseInsensitiveString(String s) { if (s == null) throw new NullPointerException(); this.s = s; } public boolean equals(Object o) { return o instanceof CaseInsensitiveString && ((CaseInsensitiveString)o).s.equalsIgnoreCase(s); } private volatile int hashCode = 0; public int hashCode() { if (hashCode == 0) hashCode = s.toUpperCase().hashCode(); return hashCode; } public String toString() { return s; } } ``` LookupCode.java ``` node = nodeMap.get(new CaseInsensitiveString(stringFromEvent.toString())); ``` Because of this, I'm creating a new object of CaseInsensitiveString for every event. So, it might hit performance. Is there any other way to solve this issue?

Original source

Related problems