есть ли карта, которая даст мне хеширование в обоих направлениях? - PullRequest
1 голос
/ 08 мая 2011

Я держу следующую карту

      Map<Integer, List<String>>

когда я добавляю новую строку к определенному int, я просто добавляю ее в список значений int на моей карте.
Теперь мне также нужно удалить его из последнего списка, в котором он находился.
Я уточню на секунду:
Это не тот же самый экземпляр строки. Я получаю int и String, мне нужно добавить их и удалить из прежнего списка на карте, в котором содержится то же строковое значение.

Это означает, что мне нужно провести еще одну карту строки в целое число?
Нужно ли вести две коллекции?
спасибо.

Ответы [ 2 ]

4 голосов
/ 08 мая 2011

Это похоже на BiMap, но поскольку ваши отношения асимметричны (один int относится к List из String с, тогда как String может относиться только к одному int), он не будет быть идеальным мтач.

Мне кажется, что вам нужны две карты: первая - ваша Map<Integer, List<String>>, а вторая - Map<String, Integer>. Вы, конечно, хотите заключить это в класс. Добавление новой строки:

  1. Если есть запись для String в Map<String, Integer>,
    • Получить Integer из этого списка.
    • Используйте его, чтобы найти List из вашего Map<Integer, List<String>> и удалить String из него.
  2. Добавьте String к соответствующему List в вашем Map<Integer, List<String>>
  3. Добавьте запись, сопоставляющую String с Integer в Map<String, Integer>.
2 голосов
/ 08 мая 2011

Вы можете попробовать использовать BiavaMap Guava .

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