[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-collections-v-kakom-sluchae-mozhet-byt-poteryan-element-v-hashmap":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},480,"v-kakom-sluchae-mozhet-byt-poteryan-element-v-hashmap",12,"collections","Collections","📚","В каком случае может быть потерян элемент в HashMap","Элемент теряется, когда после его добавления изменяется объект-ключ таким образом, что меняется его `hashCode()` или результат `equals()`.\n\nСценарий потери:\n\n1. Объект `key` добавляется в HashMap: `map.put(key, value)`.\n2. Хэш-код key вычисляется, и пара записывается в соответствующую корзину.\n3. Одно из полей key, участвующее в вычислении hashCode\u002Fequals, изменяется.\n4. При попытке `map.get(key)` вычисляется новый hashCode, определяется другая корзина — элемент не найден.\n5. Даже если элемент случайно окажется в той же корзине, `equals()` может вернуть false.\n\nДополнительно: при рехешировании (увеличении capacity) элемент попадет в корзину, вычисленную по новому hashCode. Исходный ключ с измененным hashCode никогда не найдет этот элемент.\n\nИменно поэтому ключи HashMap должны быть неизменяемыми (immutable) или, как минимум, поля, участвующие в hashCode\u002Fequals, не должны меняться после добавления в карту.\n\n> **На собеседовании:** объясните через мутабельный ключ. Сформулируйте правило: ключи HashMap должны быть immutable.","","middle",[15,16,17],"основы","best-practices","jcf",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":34,"featuredSnippetReady":35},"Потеря элемента в HashMap — мутабельный ключ — Gymterview","Элемент теряется при изменении мутабельного ключа после put(): новый hashCode → другая корзина → элемент не найден. Ключи должны быть immutable.","Потеря элемента в HashMap — Gymterview","Мутабельный ключ: изменение после put() → другой hashCode → элемент потерян. Ключи = immutable.",[26,27,28,29,30,31,32,33],"HashMap","потеря элемента","мутабельный ключ","hashCode","equals","immutable","Java","собеседование","При изменении мутабельного ключа после добавления: hashCode меняется, get() ищет в другой корзине. При рехешировании элемент попадёт в корзину по новому hashCode — потерян окончательно. Правило: ключи HashMap должны быть immutable.",true]