Ответ
Массивы в Java не переопределяют методы equals() и hashCode(), наследуя их реализацию от класса Object. Это нарушает ключевой контракт для ключей в HashMap.
Проблема: Два разных массива с идентичным содержимым будут считаться разными ключами, так как Object.equals() сравнивает ссылки, а не содержимое.
byte[] key1 = {1, 2, 3};
byte[] key2 = {1, 2, 3}; // Идентичное содержимое
Map<byte[], String> map = new HashMap<>();
map.put(key1, "value1");
System.out.println(map.get(key2)); // Вывод: null
System.out.println(key1.equals(key2)); // Вывод: false (сравнение ссылок)
System.out.println(Arrays.equals(key1, key2)); // Вывод: true (сравнение содержимого)
Решение: Используйте объекты с корректной реализацией equals/hashCode:
ByteBuffer(после вызова.flip()или.rewind()).List<Byte>(например,Arrays.asList(1, 2, 3)для оберток).- Собственный класс-обертка для массива с переопределенными методами.
String, если массив представляет текст (например,new String(bytes, StandardCharsets.UTF_8)).