Size: a a a

Kotlin Community

2020 August 14

PE

Pavel Erokhin in Kotlin Community
ага чет типа addOrCreateEmpty() :)
источник

VP

Vladimir Petrakovich in Kotlin Community
Ivan
да думаю, вот такое вынести в extension

map[0]?.add(o) ?: run { map[0] = mutableListOf(o) }
А можно проще map.getOrPut(0) { mutableListOf() }.add(o)
источник

I

Ivan in Kotlin Community
Vladimir Petrakovich
А можно проще map.getOrPut(0) { mutableListOf() }.add(o)
спасибо, и extension не придётся писать
источник

BP

Bogdan Panchenko in Kotlin Community
Pavel Erokhin
безопасный
Нет, если есть многопоточка
источник

SZ

Sergey Zolotov in Kotlin Community
источник

SB

Sergey Barmin in Kotlin Community
Уже обрадовался будто что-то новое
источник

X

X in Kotlin Community
Столкнулся с пренеприятнейшей ситуацией, когда hashCode разных строк оказался одинаков. В итоге в хэшмапе один объект заменял другой объект, а заметил я это только тогда, когда данные появились с заглавными и строчными буквами, вместо только заглавных. Решением будет в хэшкоде приводить строки в верхний регистр и потом считать от них хэшкод. Может кому-нибудь будет полезно. Но блин, ведь эта ситуация с равными хэшкодами может вылезти где угодно, как бы так отлавливать все такие возможные места?
println("Eu".hashCode() == "FV".hashCode())  -> true
println("Eu" == "FV") --> false

println(Symbol("Eu").hashCode() == Symbol("FV").hashCode()) -> true
println(Symbol("Eu") == Symbol("FV")) -> false
источник

RI

Ruslan Ibragimov in Kotlin Community
X
Столкнулся с пренеприятнейшей ситуацией, когда hashCode разных строк оказался одинаков. В итоге в хэшмапе один объект заменял другой объект, а заметил я это только тогда, когда данные появились с заглавными и строчными буквами, вместо только заглавных. Решением будет в хэшкоде приводить строки в верхний регистр и потом считать от них хэшкод. Может кому-нибудь будет полезно. Но блин, ведь эта ситуация с равными хэшкодами может вылезти где угодно, как бы так отлавливать все такие возможные места?
println("Eu".hashCode() == "FV".hashCode())  -> true
println("Eu" == "FV") --> false

println(Symbol("Eu").hashCode() == Symbol("FV").hashCode()) -> true
println(Symbol("Eu") == Symbol("FV")) -> false
hashcode используется только чтобы положить в бакет, из бакета достается по equals. то что вы описали - невозможно. учите мат часть
источник

IO

Iaroslav Orlov in Kotlin Community
X
Столкнулся с пренеприятнейшей ситуацией, когда hashCode разных строк оказался одинаков. В итоге в хэшмапе один объект заменял другой объект, а заметил я это только тогда, когда данные появились с заглавными и строчными буквами, вместо только заглавных. Решением будет в хэшкоде приводить строки в верхний регистр и потом считать от них хэшкод. Может кому-нибудь будет полезно. Но блин, ведь эта ситуация с равными хэшкодами может вылезти где угодно, как бы так отлавливать все такие возможные места?
println("Eu".hashCode() == "FV".hashCode())  -> true
println("Eu" == "FV") --> false

println(Symbol("Eu").hashCode() == Symbol("FV").hashCode()) -> true
println(Symbol("Eu") == Symbol("FV")) -> false
джавовая хешмапа не подвержена коллизиям :/
источник

IO

Iaroslav Orlov in Kotlin Community
у вас либо кривая реализация мапы, либо какая-то серьёзная проблема с jdk
источник

ПГ

Павло Гриник... in Kotlin Community
подозреваю что многопоточка
источник

IO

Iaroslav Orlov in Kotlin Community
Павло Гриник
подозреваю что многопоточка
тоже вариант
источник

IO

Iaroslav Orlov in Kotlin Community
но в этом случае лечится заменой на concurrenthashmap
источник

ПГ

Павло Гриник... in Kotlin Community
И разный хешкод не гарантируется для разных объектов просто по своей математической природе
источник

X

X in Kotlin Community
Ruslan Ibragimov
hashcode используется только чтобы положить в бакет, из бакета достается по equals. то что вы описали - невозможно. учите мат часть
у меня хранение в том конкретно месте сделано в виде:
val something: LinkedHashMap<Int, DataClass> = LinkedHashMap()

где ключем является hashCode
источник

BP

Bogdan Panchenko in Kotlin Community
X
Столкнулся с пренеприятнейшей ситуацией, когда hashCode разных строк оказался одинаков. В итоге в хэшмапе один объект заменял другой объект, а заметил я это только тогда, когда данные появились с заглавными и строчными буквами, вместо только заглавных. Решением будет в хэшкоде приводить строки в верхний регистр и потом считать от них хэшкод. Может кому-нибудь будет полезно. Но блин, ведь эта ситуация с равными хэшкодами может вылезти где угодно, как бы так отлавливать все такие возможные места?
println("Eu".hashCode() == "FV".hashCode())  -> true
println("Eu" == "FV") --> false

println(Symbol("Eu").hashCode() == Symbol("FV").hashCode()) -> true
println(Symbol("Eu") == Symbol("FV")) -> false
Слушать доклад Шепелева! Ну Руслан указал на ошибки
источник

IO

Iaroslav Orlov in Kotlin Community
X
у меня хранение в том конкретно месте сделано в виде:
val something: LinkedHashMap<Int, DataClass> = LinkedHashMap()

где ключем является hashCode
так у вас она меняется из нескольких потоков или нет?
источник

IO

Iaroslav Orlov in Kotlin Community
аа
источник

RI

Ruslan Ibragimov in Kotlin Community
X
у меня хранение в том конкретно месте сделано в виде:
val something: LinkedHashMap<Int, DataClass> = LinkedHashMap()

где ключем является hashCode
Ну тогда вот:

https://t.me/kotlin_lang/201759
источник

IO

Iaroslav Orlov in Kotlin Community
так нельзя использовать хешкод как уникальный id
источник