[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-collections-pochemu-nelzya-ispolzovat-byte-v-kachestve-klyucha-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":17,"progress":18,"seo":19},481,"pochemu-nelzya-ispolzovat-byte-v-kachestve-klyucha-v-hashmap",12,"collections","Collections","📚","Почему нельзя использовать byte[] в качестве ключа в HashMap","Массив `byte[]` не переопределяет методы `hashCode()` и `equals()` — используются стандартные реализации из `Object`, основанные на идентичности объекта (ссылке), а не на содержимом.\n\nЭто означает:\n\n- `hashCode()` возвращает значение, зависящее от адреса объекта в памяти (через `System.identityHashCode()`), а не от содержимого массива.\n- `equals()` сравнивает ссылки (==), а не элементы массива.\n\nПоэтому два массива с одинаковым содержимым (`{1, 2, 3}`) будут иметь разные hashCode и `equals()` вернет false. Элемент, сохраненный с одним массивом-ключом, невозможно найти, используя другой массив с теми же элементами — доступ возможен только по той же самой ссылке.\n\nДля использования массива байт как ключа его можно обернуть в `ByteBuffer.wrap(bytes)` или `String` — эти классы корректно реализуют hashCode и equals на основе содержимого.\n\n> **На собеседовании:** ключевая мысль — массивы наследуют hashCode\u002Fequals от Object, которые работают по ссылке. Предложите альтернативы: ByteBuffer.wrap() или String.","","middle",[15,16],"основы","jcf",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":35,"featuredSnippetReady":36},"byte[] как ключ HashMap — почему нельзя — Gymterview","Массив не переопределяет hashCode\u002Fequals — работают по ссылке (Object). Два массива с одинаковым содержимым → разные hashCode и equals=false. Альтернатива: ByteBuffer или String.","byte[] как ключ HashMap — нельзя — Gymterview","hashCode\u002Fequals массива — по ссылке. Два массива {1,2,3} — разные ключи. Используйте ByteBuffer.",[25,26,27,28,29,30,31,32,33,34],"HashMap","byte[]","массив","hashCode","equals","Object","ByteBuffer","ключ","Java","собеседование","Массив byte[] не переопределяет hashCode() и equals() — используются методы Object, основанные на ссылке. Два массива с одинаковым содержимым имеют разные hashCode и equals=false. Альтернативы: ByteBuffer.wrap(bytes) или String.",true]