Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 17.06.2018, 23:00   #1
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Адрес: Новосибирская область
Сообщений: 111
Репутация: 10
Вопрос HashMap

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

icq: 512-765
skype: alexp.frl
По умолчанию

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

А ^ это xor.
Alex11223 вне форума   Ответить с цитированием
Старый 17.06.2018, 23:09   #3
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Адрес: Новосибирская область
Сообщений: 111
Репутация: 10
По умолчанию

чёт не пойму получается
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, 23:16   #4
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Адрес: Новосибирская область
Сообщений: 111
Репутация: 10
По умолчанию

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, 08:17   #5
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,537
Репутация: 1916

icq: 216409213
По умолчанию

Цитата:
Сообщение от 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, 11:22   #6
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Адрес: Новосибирская область
Сообщений: 111
Репутация: 10
По умолчанию

так давайте ещё разик
Код:

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, 11:30   #7
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Адрес: Новосибирская область
Сообщений: 111
Репутация: 10
По умолчанию

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

icq: 512-765
skype: alexp.frl
По умолчанию

https://en.wikipedia.org/wiki/Hash_table
Alex11223 вне форума   Ответить с цитированием
Старый 20.06.2018, 11:33   #9
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Адрес: Новосибирская область
Сообщений: 111
Репутация: 10
По умолчанию

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

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

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


00:09.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru