Почему LinkedCaseInsensitiveMap использует LinkedHashMap и HashMap? - PullRequest
3 голосов
/ 17 апреля 2019

Я смотрю на структуру LinkedCaseInsensitiveMap (весенний фреймворк 5.0.5.RELEASE). Мне любопытно, почему LinkedCaseInsensitiveMap использует LinkedHashMap и HashMap, и почему бы просто не использовать LinkedHashMap, как этот?

   private final LinkedHashMap<String, V> targetMap;

   public V get(Object key) {
      if (key instanceof String) {
         return this.targetMap.get(convertKey((String) key));
      }
      return null;
   }

1 Ответ

3 голосов
/ 17 апреля 2019
private final LinkedHashMap<String, V> targetMap;

private final HashMap<String, String> caseInsensitiveKeys;

В этом случае targetMap содержит строку реального регистра для вашего объекта, а caseInsensitiveKeys содержит отображение вашего ключа в нижнем регистре на ваш ключ реального регистра.

Позволяет показать вамключи реального регистра, когда вы выполняете для каждой итерации, но в то же время она позволяет вам не учитывать регистр.

Итак, допустим, следующий код:

LinkedCaseInsensitiveMap<Object> map = new LinkedCaseInsensitiveMap<>();
map.put("MyCustomObject", new Object());

"MyCustomObject" -> new Object() в targetMap и "mycustomobject" -> "MyCustomObject" в caseInsensitiveKeys.И теперь, если вы попытаетесь распечатать все объекты с вашего map, он напечатает его, как вы добавили, а не изменили ключи.Вы не можете заархивировать его без второй карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...