Почему мой Hashmapтолько две записи? - PullRequest
0 голосов
/ 29 мая 2018

Я использовал HashMap для хранения словаря типа boolean и значения indexName.Тем не менее, я заметил, что мой hashmap увеличивается только до 2.Почему это происходит и как я могу это исправить?

  public Map<Boolean, String> findMetadata(String scanPackage) {
    Map<Boolean, String> metadatas = new HashMap<>();
    ClassPathScanningCandidateComponentProvider provider = createComponentScanner();
    for (BeanDefinition beanDef : provider.findCandidateComponents(scanPackage)) {
      try {
        Class<?> cl = Class.forName(beanDef.getBeanClassName());
        Indexable indexable = cl.getAnnotation(Indexable.class);
        logger.info("---------------------------- " + indexable.dictionary() + " " + indexable.indexName());
        if (!metadatas.containsValue(indexable.indexName())) {
          metadatas.put(indexable.dictionary(), indexable.indexName());
        }
      } catch (ClassNotFoundException e) {
        logger.error(ERROR + e);
      }
    }
    return metadatas;
  }

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Вы используете Map<Boolean,String>, где ключ Boolean и значение String.

Теперь Map не поддерживает дублированные ключи.

Объект, который сопоставляет ключи со значениями.Карта не может содержать дубликаты ключей;каждый ключ может соответствовать максимум одному значению.

Таким образом, вы будете ограничены клавишей, так как Boolean может иметь только 3 значения true, false и null ... и так как HashMap позволяет null ключ

Эта реализация предоставляет все необязательные операции с картой и допускает нулевые значения и нулевой ключ

Ваш максимальный размер будет равен 3.

0 голосов
/ 29 мая 2018

Очевидно, вы используете Boolean в качестве ключа в хэш-карте.Теперь для Hashmap, ниже верно.1. Он должен иметь уникальные ключи (в противном случае он переопределит существующее значение, сохраненное в соответствии с ключом)и 2. Boolean может иметь два значения: true или false (не может быть null), поэтому на вашей карте есть только два значения.

Если вы хотите иметь словарь, вы должны изменить свой MAP какниже.

Map<Integer, String> metadatas = new HashMap<Integer, String>();

Индекс: должно быть несколько цифр, поэтому ключи целые.Значения должны быть String.

0 голосов
/ 29 мая 2018

Просто измените объявление карты следующим образом:

Map<String, Boolean> metadatas = new HashMap<>();

и метаданные вставьте таким образом:

metadatas.put(indexable.indexName(), indexable.dictionary());

Возможно, это то, что вы действительно хотите сделать.

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