相关疑难解决方法(0)

不区分大小写的字符串作为HashMap键

我想使用不区分大小写的字符串作为HashMap键,原因如下.

  • 在初始化期间,我的程序使用用户定义的String创建HashMap
  • 在处理事件(在我的情况下是网络流量)时,我可能会在不同的情况下收到String但我应该能够<key, value>从HashMap中找到忽略我从流量中收到的情况.

我遵循了这种方法

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;
            }
    }
Run Code Online (Sandbox Code Playgroud)

LookupCode.java

    node = nodeMap.get(new CaseInsensitiveString(stringFromEvent.toString()));
Run Code Online (Sandbox Code Playgroud)

因此,我正在为每个事件创建一个CaseInsensitiveString的新对象.因此,它可能会影响性能.

有没有其他方法可以解决这个问题?

java dictionary case-insensitive

157
推荐指数
5
解决办法
12万
查看次数

61
推荐指数
4
解决办法
2万
查看次数

标签 统计

case-insensitive ×2

java ×2

dictionary ×1

map ×1