Показать все коллизии в HashMap

1

Я новичок в HashMap в java. Я пытаюсь создать ситуацию, когда происходит столкновение и для одного ключа (в этом случае 1). Я читал, что значения в HashMap не написаны, вместо этого они поддерживаются в списке ссылок. Как отобразить все значения ключа "1"?

    public static void main(String[] args)
    {
        HashMap<String, String> hash = new HashMap<String, String>();
        hash.put("1", "one");
        hash.put("1", "two");
        hash.put("1", "three");
        hash.put("1", "four");
        System.out.println(hash);
    }

Вывод вышеуказанного кода -

{1=two}
Теги:
hash
hashmap
hashtable

2 ответа

4

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

Различные ключи могут иметь один и тот же хэш-код, который заставляет их храниться в том же связанном списке внутри HashMap, но ключи на карте уникальны. Для каждого из двух ключей в карте key1.equals(key2) возвращает false, даже если key1.hashCode()==key2.hashCode().

  • 1
    Итак, если мне нужно хранить «Ca» и «DB» (оба имеют одинаковое значение для хэш-кода), что мне делать? И ключи или значения "Ca" и "DB"? Если они являются ценностями, то в чем ключ?
  • 0
    @ user3554962, являются ли они ключами или значениями, зависит от того, являются ли они первым или вторым аргументом, переданным методу put. Если они являются ключами, они оба будут сохранены в хэш-карте со своими значениями, и не имеет значения (с точки зрения функциональности), что они имеют одинаковое значение hashCode. Однако может возникнуть проблема с производительностью, если многие ключи имеют одинаковый хэш-код.
0

Первые две строки Map javadoc объясняют все это.

public interface Map<K,V>

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

Javadoc for Map можно найти здесь - http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

  • 0
    Итак, если мне нужно хранить «Ca» и «DB» (оба имеют одинаковое значение для хэш-кода), что мне делать? И ключи или значения "Ca" и "DB"? Если они являются ценностями, то в чем ключ?
  • 0
    Даже если хэш-код возвращает одно и то же значение, «Ca» .equals «DB» завершится ошибкой, и поэтому они будут рассматриваться как 2 разных ключа. Нет никаких ограничений на значения. А может иметь 10 разных ключей, имеющих одинаковое значение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню