2016-02-26 3 views
3

Im пытается написать программу для удаления повторяющихся пар ключ-значение списка слов. Однако, если ключ дублируется с другим значением, эта запись должна быть разрешена для добавления. Пожалуйста, помогите мне понять, какая коллекция java решит эту ситуацию.Какая коллекция java позволяет дублировать ключи

  • key1 аааа
  • key2 BBBB
  • ключ3 сссс
  • Key4 дддд
  • key2 BBBB - Дубликат пара - не допускается
  • Key1 хххх - дубликат ключа - разрешено
  • key5 ГГГГ
  • ключ2 nnnn
+0

ключи не могут быть дублированы по определению. То, о чем вы говорите, называется составным ключом (состоящим из нескольких значений). Таким образом, это означает, что вы можете использовать обычную карту, если используете ключ, который объединяет оба значения. –

ответ

3

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

Вот некоторые из основ реализации, а не вся вещь, но не мог себе представить, вам потребуется больше, чем это может быть, или способ удалить

Редактировать

Просто видел, как вы хотели дубликатом пары, которые будут выброшены, может сделать это с помощью набора, вместо того, чтобы бросать ошибку просто вернули логическое значение, чтобы показать, если он уже был там или нет (если она существует) возвращает ложные

public class MultiValueMap<K,V> 
{ 
    private final Map<K,Set<V>> mappings = new HashMap<K,Set<V>>(); 

    public Set<V> getValues(K key) 
    { 
     return mappings.get(key); 
    } 

    public Boolean putValue(K key, V value) 
    { 
     Set<V> target = mappings.get(key); 

     if(target == null) 
     { 
      target = new HashSet<V>(); 
      mappings.put(key,target); 
     } 

     return target.add(value); 
    } 

} 
1

Вы не можете сделать это с помощью Java-коллекции.

Вы можете использовать Multimap, он поддерживает дубликаты ключей, но также поддерживает дубликаты ключей и пары значений.

Лучшим решением для вас является использование Multimap и проверка того, существует ли значение, но не добавляйте его.

1

Насколько мне известно, такой реализации коллекции в JRE по умолчанию нет. Однако, похоже, реализации в third party libraries.

Чтобы получить что-то подобное, вы можете использовать Map<K, List<V>>, который представляет собой карту, содержащую список значений для каждой клавиши.

Однако, я не думаю, что вам это нужно. Чтобы объединить значения для повторяющихся ключей, вы можете проверить, существует ли ключ до того, как вы поместите новую пару ключ-значение в карту.

  • , если он уже существует, замените значение на объединенном старого и нового значения
  • если он еще не существует, просто поставить новую пару ключ-значение в карте.
-1

Словарь содержит слова и определения, поэтому овечка = «шерстяное млекопитающее» является действительным назначением. Каждый раз, когда вы смотрите на овцу, вы получаете шерстяного млекопитающего.

Массив индексируется целым числом, и могут иметь одинаковые значения,

arr[2]=5 ; arr[7]=5; 

Хэш может хранить повторяющиеся значения, но ключи должны быть уникальными:

Adam{age}=21; 
    Bill{age}=21; 

Некоторые языки используют точек для свойств:

Adam.age=21; 
-2

вашего случай ба для этого требуется HashMap.

Просто поместите ключ как ключ и значение как значение в HashMap.

Это связано с тем, что ключ будет любым способом быть уникальным и в случае, если существует столкновение значений. HashMap поддерживает связанный список для хранения всех этих сталкивающихся значений. В случае, если любое значение такое же, как любое более раннее значение в связанном списке, оно просто заменяет старый с новым.

Для примера.

По вашему требованию:

Key1 AAAA - должны храниться ключом1 BBBB - следует хранить ключом1 AAAA - не должны быть сохранены, как это дубликат.

Таким образом, в основном hashmap будет хранить значения «aaaa» и «bbbb» против «key1» в качестве ключа. Позже, когда мы попытаемся сохранить «aaaa» снова против «key1», тогда более старое значение «aaaa» будет просто заменено.

Следовательно, дублирование значений автоматически обрабатывается с помощью hashmap.

Следовательно, вы можете использовать HashMap в своем случае.

+0

Можете ли вы сообщить мне, почему вы отметили его как -ve? – ramasCoder

+0

В своем высокомерии вы забыли дать веские основания для голосования. – ramasCoder

1

Начиная с версии Guava 2.0 появился новый тип карты SetMultimap, который вы можете использовать, я думаю, точно соответствует вашим целям. Он позволяет дублировать ключи, но не дублирует пары ключ/значение. См. Guava documentation.