Основываясь на других ответах, в основном существует два подхода: создание подклассов HashMap
или перенос String
.Первый требует немного больше работы.На самом деле, если вы хотите сделать это правильно, вы должны переопределить почти все методы (containsKey, entrySet, get, put, putAll and remove
).
Во всяком случае, у него есть проблема.Если вы хотите избежать будущих проблем, вы должны указать операции Locale
в String
.Таким образом, вы бы создали новые методы (get(String, Locale)
, ...).Все проще и понятнее. Строка:
public final class CaseInsensitiveString {
private final String s;
public CaseInsensitiveString(String s, Locale locale) {
this.s = s.toUpperCase(locale);
}
// equals, hashCode & toString, no need for memoizing hashCode
}
Ну и о ваших заботах о производительности: преждевременная оптимизация - корень всех зол :)