|
|
|
переопределние hash code
|
|||
|---|---|---|---|
|
#18+
arrtТо есть будут постоянные колизии и что? Хешмап будет неправильно работать или система будет очень долго разрешать эти колизии? Производительность выборки из HashMap будет хуже чем полный перебор по массиву. Вся польза от структуры HashMap нивелируется. arrtЕсли все таки в большинстве случаев есть зависимость иквала от хешмап почему не будет возвращать truе - как тогда система будет "бороться" с этой несправедливостью и какой механизм вместо сравнение хешкодов приведет к решению проблемы колизий. Какой-то набор слов. Какая ещё несправедливость? Кто должен true возвращать? arrtВот действительно раньше думал что иквал() сравнивает типы обьектов, потом их все поля, а функция хешкод -- есть лиш быстрой альтернативой более громзкого первого метода. Assumption is the mother of all fuck ups. Не нужно выдумывать то что написано в документации. arrtИ я читал джава документацию - там о какой то ссылке на адрес обьекта в памяти речь идет -- а задали мне вопрос на засыпку и делай что хочеш если этот "адрес" будет 1? Вы путаете причину и следствие. То что java.lang.Object.hashCode() реализован определенным образом совершенно не значит что вашим объектам подойдёт такая реализация. arrtХотя снова таки функция на практике как и написано в документации нужна в хешмапе и хешсете. HashSet это обертка над HashMap. arrtА какая дефолтная реализация двух методов для класа Objеct так не понял. Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 10:38 |
|
||
|
переопределние hash code
|
|||
|---|---|---|---|
|
#18+
marcomanarrtА какая дефолтная реализация двух методов для класа Objеct так не понял /java/jdk/1.8.0.121_64/src.zip/java/lang/Object.java Ну увидешь ты там native, и что? Там 5, что ли, реализаций, можно выбирать ключиком при старте. В актуальной версии по-умолчанию некоторая функция от состояния потока в момент создания объекта. Это недавно случайно включили (и даже известно, кто включил, народ прикалывался на эту тему) arrtТо есть будут постоянные колизии и что? Хешмап будет неправильно работать или система будет очень долго разрешать эти колизии? Если объект Comparable, то будет построено дерево. И поиск объекта будет идти худо-бедно не очень медлено. Если нет (или в старых версиях jdk-всегда)- то тупо список и сравнивать equals при каждого. Как результат- была атака на java-сервера через кучи запросов с совпадающим hash (для String подобрать такие просто). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 10:43 |
|
||
|
переопределние hash code
|
|||
|---|---|---|---|
|
#18+
Дефолтную реализацию иквала() привели, а хешкода нет. Хотя если сравниваются ссылки то это тот же заувулированый хешкод с адресом. А мое представление о сравнение типа и полей вообще ни к чему не годится ибо однаковых обьектов можно создать сколь угодно. Но как тогда реализировать эти методы к хешсету, вот здесь именно не надо дубликатов. Аналогично к хешмапу - с включением хешкода в иквал? Или мой подход как раз подойдет ибо если обьекты одного типа имеют те же поля значит это дубликат - и снова добавлять в колекцию нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 23:41 |
|
||
|
переопределние hash code
|
|||
|---|---|---|---|
|
#18+
Alexey TominНу увидешь ты там native, и что?javadoc метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 12:04 |
|
||
|
переопределние hash code
|
|||
|---|---|---|---|
|
#18+
arrtДефолтную реализацию иквала() привели, а хешкода нет. Она зависит от настроект и реализации JVM. Я могу найти его в исходниках OpenJDK. Но она вам вообще никак не поможет. Вам бы понимания. arrtХотя если сравниваются ссылки то это тот же заувулированый хешкод с адресом. Ну, как бы, да. arrtА мое представление о сравнение типа и полей вообще ни к чему не годится ибо однаковых обьектов можно создать сколь угодно. Сложно комментировать. Что у вас за представление - не знаю. arrt Но как тогда реализировать эти методы к хешсету, вот здесь именно не надо дубликатов. Кому реализаовать? Вам? Есть куча статей по этому поводу. Есть генераторы в IDE и есть библотеки, которые помогают автоматизировать реализацию этих методов. arrt Аналогично к хешмапу - с включением хешкода в иквал? Вы кажется пропустили мой предыдущий коментарий если до сих пор их разделяете. http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashSet.java arrt Или мой подход как раз подойдет ибо если обьекты одного типа имеют те же поля значит это дубликат - и снова добавлять в колекцию нельзя? Вы немного путаетесь в терминологии. 1. Поля о объектов одного типа - одни и те же. Так как поля определяются классом, то есть типом. Вы хотели написать "значение полей", но не написали. 2. Да, зачастую, вычисление hashCode и equals() основано на полях класса. Но нужно аккуратно выбирать на каких именно полях класса. Потому что для mutable объектов, изменение значение поля может привести к изменению значения hashCode, что фатально для HashMap. Поэтому если у вас все поля объекта изменяемые, то, возможно, есть смысл оставить дефолтную реализацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 12:17 |
|
||
|
переопределние hash code
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, А как ситуация состоит в .nеt касательно методов (get)hashcode(), equals()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2017, 19:50 |
|
||
|
переопределние hash code
|
|||
|---|---|---|---|
|
#18+
arrtBlazkowicz, А как ситуация состоит в .nеt касательно методов (get)hashcode(), equals()? https://msdn.microsoft.com/en-us/library/system.object(v=vs.110).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2017, 20:20 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39498849&tid=2122684]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 397ms |

| 0 / 0 |
