Есть ли в любом случае я могу распечатать ключи со значениями, которые имели коллизии? Если у ключа есть два значения, я хочу иметь возможность распечатывать эти значения, как я могу это сделать, что я внутри класса хэш-карты и внося изменения в него.распечатать hashmap collision
ответ
Если ключ имеет два значения ...
В HashMap
, ключ не может иметь два значения. Если вы звоните map.put(key,value)
с существующим key
, старое значение удаляется с карты и возвращается put()
.
Один способ иметь несколько значений для каждой клавиши: HashMap<K,Collection<V>>
. Это автоматически обеспечивает необходимую функциональность, поскольку вы можете просто изучить содержимое коллекции значений после добавления к ней нового элемента.
Существуют также сторонние классы, предоставляющие такие функции, как MultiValueMap
.
редактировать:
Если вы говорите несколько ключей, в конечном итоге в том же ведро, то вам нужно изменить HashMap
«s put()
метод:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
if (table[i] != null) {
// TODO: there's already something in this bucket
}
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
...
(Добавить свой код, где находится линия TODO
.)
Вам необходимо внести похожие изменения в putForNullKey()
и другие связанные с ним методы, такие как putForCreate()
.
Если вы изменяете класс HashMap, вы должны найти, где список элементов привязан к хэш-массиву и определить, когда в цепочке больше одного.
ОДНАКО, у вас есть хорошая причина для модификации HashMap, и вам лучше изменить пакет и имя класса (на что-то вроде com.my.company.HashMapWithCollisionStatistics) или рискнуть вечным гневом все, кто стоит за вами, чтобы поддерживать Java-код в вашей группе.
LOL. Да, я сделал. «Что происходит вокруг», не хотел бы, чтобы кто-то это делал со мной. – mkuk
Просто используйте MultiMap из коллекций google.
Зачем вам это нужно? Если вы просто хотите проверить конфликт, тогда вызовите hashcode() для объектов, которые вы пытаетесь сохранить в хэш-карте, не сохраняя их.
- 1. HashMap Collision Handling
- 2. Вертикально распечатать hashmap
- 3. Не удается распечатать объекты, хранящиеся в HashMap?
- 4. Как распечатать все значения определенного ключа Hashmap
- 5. Как распечатать содержимое HashMap в определенном формате?
- 6. Как распечатать мой Hashmap в Java
- 7. Как распечатать все ключи в hashmap?
- 8. Карта Java :: hashCode() collision - почему?
- 9. jQuery Collision
- 10. PyGame Collision?
- 11. CFBundleIdentifier Collision
- 12. Vector Collision
- 13. JavaScript Collision
- 14. Love2D Collision?
- 15. BitmapData Collision
- 16. CRC32 Collision
- 17. Как распечатать весь ключ и значения из HashMap в Android?
- 18. Попытка создать hashmap и распечатать его содержимое (ключи)
- 19. Как распечатать значение HashMap? Выход, такой как xxx @ da52a1
- 20. Самый быстрый способ упорядочить сортировку и распечатать большой HashMap?
- 21. Как распечатать HashMap <String, ArrayList <Integer>>?
- 22. Как распечатать из списка HashMap, не печатая дубликатов?
- 23. MonoGame + TiledSharp Collision
- 24. Javascript ball collision
- 25. XNA 2D Collision Detection
- 26. COCOS2D Collicle Effect Collision
- 27. beginner: python namespace collision?
- 28. Bouncing Ball Collision
- 29. Libgdx Rectangle Wall Collision
- 30. cocos2d CCSprite Collision issue
* (Я думаю, вы говорите о хэшах столкновений и о значении хешей, сталкивающихся и ** не о «значении», как в парах {ключ, значение}, я прав?) * ... Если по какой-либо причине у вас слишком много коллизий, это может быть из-за плохо выбранного метода * hashCode *: если у вас есть другой объект, отличный от эквивалента, возвращающий один и тот же хеш (это плохо, но это не запрещено), тогда вы можете ухудшить производительность Карты. Вместо того, чтобы модифицировать код различных реализаций карты, вы можете вместо этого написать лучший метод * hashCode * для ваших объектов, отличных от равных, подверженных хешам столкновения ... – TacticalCoder
@ user988052 Я согласен, даже когда я ответил ниже, просто вызовите hashcode и посмотреть, в чем проблема с hashcode ... – yadab