由于以下原因,我想使用不区分大小写的字符串作为HashMap键。
<key, value>
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()));
因此,我为每个事件创建一个CaseInsensitiveString新对象。因此,它可能会影响性能。
还有其他解决方法吗?
Map<String, String> nodeMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
这就是你真正需要的。