Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2018, 22:00   #1
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
Вопрос HashMap

поясните мне про побитовый сдвиг, как вычисляется индекс понять не могу(((
поясните плиз что происходит в этой строчке:
(h = key.hashCode()) ^ (h >>> 16)
хочу понять основы
^ - вот это что означает?
h ^= (h >>> 20) ^ (h >>> 12); - и поясните что тут происходит "^=" - это вроде отрицание, не равно чему? блин помогите разобраться
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 17.06.2018, 22:03   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Alexmur07 Посмотреть сообщение
поясните мне про побитовый сдвиг
Так а чего там объяснять? Биты сдвигает.

А ^ это xor.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.06.2018, 22:09   #3
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

чёт не пойму получается
h ^= (h >>> 20) ^ (h >>> 12); - не равно чемуто или чемуто?
а вот в этой строчке:
static final int hash(Object key) {
return:
(h = key.hashCode()) ^ (h >>> 16) к примеру если подставить
Integer key = 124256;
(h = key.hashCode()) ^ (124256 >>> 16) - вот скажите что тут происходит как вы понимаете?
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 17.06.2018, 22:16   #4
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
т.е. если key нулл тогда вернуть 0, если key не null тогда h равен хешкоду ключа или хешкоду глюча чёто тама 16 .. блин ну обясните я не понял
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 18.06.2018, 07:17   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Alexmur07 Посмотреть сообщение
h ^= (h >>> 20) ^ (h >>> 12); - не равно чемуто или чемуто?
А книжку про операторы открыть слабо? Это сокращеная запись для h = h ^ ...

Цитата:
Сообщение от Alexmur07 Посмотреть сообщение
к примеру если подставить
Integer key = 124256;
(h = key.hashCode()) ^ (124256 >>> 16) - вот скажите что тут происходит как вы понимаете?
Вы сначала правильно подставьте. У вас h = key.hashCode(), а не 124256. А что вам не понятно? Читайте по порядку...

Цитата:
Сообщение от Alexmur07 Посмотреть сообщение
сли key не null тогда h равен хешкоду ключа или хешкоду глюча чёто тама 16 ..
где вы видели второе присваивание h? или условное присваивание? не выдумывайте, а читайте как есть по порядку. скобки, как в школе ограничивают и разделяют выражения.
p51x вне форума Ответить с цитированием
Старый 20.06.2018, 10:22   #6
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

так давайте ещё разик
Код:
static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
___________________________



вот этот метод вычилсяет индекс в хеш мапе я правильно понял?
ксор это у нас или
т.е.
мы тут проверяем если кей равену нулл то вернуть 0 если кей не равен нулл то h = key.hashCode() или h побитовый сдвиг на 16
т.е. если предположить что хешкод равен 2338892
то ответ получится 2338927
т.е. 2338927 - это же не индекс!? b tckb и если мы предположим что размер нашей хешмапы равен 20, то куда в какой индекс мы поместим наш ключ?
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 20.06.2018, 10:30   #7
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

и ели не ошибусь то начальный размер мапы равен 16 , вот куда мы будем вставлять ключ с таким индексом?
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 20.06.2018, 10:31   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://en.wikipedia.org/wiki/Hash_table
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.06.2018, 10:33   #9
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

может ссылочку дадите кде почитать развёрнутый ответ на данный вопрос а то я когда ищу то я нахожу ответы - как получить индекс получив остаток от деления на длинну вложенного массива если к примеру длинна вложенного массива круглое число и постоянно увеличивается в 10. где прочитать про другую версию?
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 20.06.2018, 10:35   #10
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
index = hash % array_size
везде про это только и пишут
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Достать значения JSON из HashMap yura91 Java Мобильная разработка (Android) 2 09.07.2016 19:25
Java и HashMap OlgaLenc Помощь студентам 0 10.12.2014 13:44
Работа с HashMap<> (java) 803 Помощь студентам 0 23.12.2013 19:29
Hashmap Артем533 Общие вопросы по Java, Java SE, Kotlin 2 25.11.2012 00:17