Я хотел бы использовать нечувствительную к регистру строку в качестве ключа HashMap по следующим причинам.
- Во время инициализации моя программа создает 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;
}
}
LookupCode.java
node = nodeMap.get(new CaseInsensitiveString(stringFromEvent.toString()));
Из-за этого я создаю новый объект CaseInsensitiveString для каждого события. Таким образом, это может повлиять на производительность.
Есть ли другой способ решить эту проблему?