Правильно подкрепление нечувствительной к регистру карты

Я хочу реализовать хэш-карту без учета регистра. Этот вопрос сам по себе не нов, но я хотел добавить дополнительную функциональность и не знаю, какое общее направление выбрать. Я хочу, чтобы клиент мог сделать что-то вроде этого:

boolean preserve_case = true;
Map<String, MyClass> maplet = new CaseInsensitiveHashMap<MyClass>(preserve_case); // If the client enters true at construction, then the put, get, and remove methods should still be case insensitive, but the entry and key sets should preserve the case that the client used when calling put.

maplet.put("FoO", my_class);

MyClass bar = maplet.get("foo"); // Should return a reference to my_class

Set<Entry<String, MyClass>> case_sensitive_set = maplet.entrySet(); // Since the client input true to preserve order, this entry set should be ["FoO"=my_class.toString()]

Я могу справиться с большей частью этого довольно хорошо; Я просто держуHashMap на бэкэнде. Когда клиент помещает что-либо, я пишу его в верхнем регистре, прежде чем добавить на карту.

Мне просто трудно писатьkeySet() а такжеentrySet() методы. Я хочу, чтобы возвращенный набор записей и набор ключей были поддержаны картой, как это является стандартом для карт Java.

Однако единственный способ, которым я могу думать об этом, - это создать вторую вспомогательную структуру данных, что-то вродеpreserved_case_map, который содержитinput.toUpperCase() => ввод в виде пары ключ-значение. Когда клиент призывает кentrySet() (или жеkeySet()), Я могу построить возвращенный набор записей, просматриваяpreserved_case_map, Проблема в том, что возвращенный набор записей не будет изменен, если я внесу изменения вHashMap, если я что-то не так понимаю ...

Дайте мне знать, если это имеет смысл, или если я запутываю простую ситуацию.

Ответы на вопрос(6)

Ваш ответ на вопрос