Почему нельзя использовать byte[] в качестве ключа в HashMap
Массив byte[] не переопределяет методы hashCode() и equals() — используются стандартные реализации из Object, основанные на идентичности объекта (ссылке), а не на содержимом.
Это означает:
hashCode()возвращает значение, зависящее от адреса объекта в памяти (черезSystem.identityHashCode()), а не от содержимого массива.equals()сравнивает ссылки (==), а не элементы массива.
Поэтому два массива с одинаковым содержимым ({1, 2, 3}) будут иметь разные hashCode и equals() вернет false. Элемент, сохраненный с одним массивом-ключом, невозможно найти, используя другой массив с теми же элементами — доступ возможен только по той же самой ссылке.
Для использования массива байт как ключа его можно обернуть в ByteBuffer.wrap(bytes) или String — эти классы корректно реализуют hashCode и equals на основе содержимого.
На собеседовании: ключевая мысль — массивы наследуют hashCode/equals от Object, которые работают по ссылке. Предложите альтернативы: ByteBuffer.wrap() или String.