Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 20
1

Как могло получиться два одинаковых ключа в HashMap?

29.08.2015, 12:33. Просмотров 6110. Ответов 10
Метки нет (Все метки)

Я буду приводить просто примеры. Вопрос сложный для меня, поэтому решил обратиться за помощью. Вот так "работает", "Петров" - 2, затирает 3.35, все окей.

Java
1
2
3
4
5
6
7
8
9
Map<String, Double> map = new HashMap<String, Double>();
    map.put("Иванов", 1.35);
    map.put("Петров", 3.35);
    map.put("Петров", 2.00);
    map.put("Сидоров", 6D);
    for(Map.Entry<String, Double> entry : map.entrySet())
    {
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
Вывод:
Иванов 1.35
Петров 2.0
Сидоров 6.0

А вот так, почему-то образуется два одинаковых ключа.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
String fileString = "";
        for(char a : chars)
            fileString +=a; //создание строки из массива
        System.out.println();
        String[] humans = fileString.split("\r\n"); //разделение на людей
        Map<String, Double> mapHumans = new HashMap<String, Double>();
        for (int i = 0; i < humans.length; i++) {
            String[] thisPart = humans[i].split(" "); //разделение на имя и фамилию
            mapHumans.put(thisPart[0], Double.parseDouble(thisPart[1]));
        }
        for(Map.Entry<String, Double> entry : mapHumans.entrySet())
        {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
В массиве chars[] было:
Петров 2
Сидоров 6
Иванов 1.35
Петров 3.1

Вывод:
Иванов 1.35
Петров 3.1
Петров 2.0
Сидоров 6.0
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2015, 12:33
Ответы с готовыми решениями:

Непонятно условие. Основы С++ (найти в S1,…,Sn все слова, из которых могло бы получиться a1,…,a10 в результате одной ошибки)
Добрый день. Задали решить пару задач из задачника Абрамова. Только условия вообще не могу понять!...

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У Пети имеется игровое поле размером 3×3 , заполненное числами от 1 до 9. В начале игры он может...

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У пети имеется игровое поле размером 3х3, заполненное числами от 1 до 9. В начале игры он может...

HashMap - в качестве ключа объект
Добрый день! Мне понадобилось решить такую задачу: ключ - комплексный объект, состоящий из 64...

10
8 / 8 / 6
Регистрация: 31.07.2015
Сообщений: 39
29.08.2015, 13:16 2
ключ в хешмапе всегда будет один если их несколько одинаковых
0
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 20
29.08.2015, 13:41  [ТС] 3
не понял ответа

Добавлено через 17 минут
Я проверил хеш-коды добавляемых значений, и два "Петров" имели разные хеш-коды, почему?
0
65 / 64 / 15
Регистрация: 15.12.2013
Сообщений: 166
29.08.2015, 13:59 4
greg9809, два "Петров" должны иметь один и тот же хеш код, потому что это ключи. добавляйте так
Java
1
2
3
4
map.put(1.35, "Иванов");
    map.put(3.35, "Петров");
    map.put(2.00, "Петров");
    map.put(6D, "Сидоров");
0
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 20
29.08.2015, 14:17  [ТС] 5
нет, они имеют разный хеш-код и я не знаю что с этим делать
0
65 / 64 / 15
Регистрация: 15.12.2013
Сообщений: 166
29.08.2015, 14:22 6
greg9809, прочитайте про хешкод и уникальный ключ в HashMap, тогда вы поймете что если добавлять значения с одинаковыми ключами, то они будут затираться.
0
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 20
29.08.2015, 14:24  [ТС] 7
вот и дело то в том, что одинаковые значения имеют разный хешкод, я не понимаю почему, я знаю что должно затирать поэтому и спрашиваю
0
Эксперт Java
2333 / 2169 / 551
Регистрация: 28.12.2010
Сообщений: 8,495
29.08.2015, 14:29 8
Лучший ответ Сообщение было отмечено greg9809 как решение

Решение

Цитата Сообщение от greg9809 Посмотреть сообщение
нет, они имеют разный хеш-код и я не знаю что с этим делать
скорее всего какой то символ типа переноса строки или non-ascii.
2
2878 / 2290 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
29.08.2015, 14:32 9
да что там гадать - надо выводить массив ДО того как он загоняется в мап, там или пробел где-то подгулял или перенос строки
0
8 / 8 / 6
Регистрация: 31.07.2015
Сообщений: 39
29.08.2015, 18:32 10
Цитата Сообщение от Monty_Python Посмотреть сообщение
ключ в хешмапе всегда будет один если их несколько одинаковых
Цитата Сообщение от greg9809 Посмотреть сообщение
два "Петров" имели разные хеш-коды, почему?
Потому что они не одинаковые, внезапно.
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
29.08.2015, 18:37 11
Попробуйте собрать всю строку воедино, далее переобразовать в byte (utf-8) и посчитать кол-во байтов и символов. Скорее всего byte-ов будет больше чем символов. Ответ на три поста выше моего.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2015, 18:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Хранение двух одинаковых ключей в HashMap
Если создать такую хэш функцию(hashCode так переопределить) которая для разных обьектов класса...

Как отобразить два Integer в один Integer используя HashMap?
Имею ввиду, как ввести два ключа, по которым получается третий ключ такого же типа? Прошу объяснить...

Два первичных ключа, как реализоватья
Есть база данных в Access, там имеется несколько первичных ключей, можно ли как-то это же самое...

Как взять два внешних ключа?
Есть две модели public class Tender { public int Id { get; set; } public...

среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых
среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение...

Вставка HashMap в HashMap меняет все элементы
Вставляю HashMap в HashMap генерируя карту доски для шахмат, привожу тестовый пример, вставляется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.