Je voudrais utiliser une chaîne insensible à la casse comme clé de HashMap pour les raisons suivantes.
- Pendant l'initialisation, mon programme crée un HashMap avec une chaîne définie par l'utilisateur.
- Lors du traitement d'un événement (trafic réseau dans mon cas), il se peut que je reçoive String dans un cas différent, mais je devrais être capable de localiser l'élément
<key, value>
de HashMap en ignorant le cas que j'ai reçu du trafic.
J'ai suivi cette approche
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()));
Pour cette raison, je crée un nouvel objet de CaseInsensitiveString pour chaque événement. Donc, cela peut affecter les performances.
Existe-t-il un autre moyen de résoudre ce problème ?