У меня есть программа, которая получает идентификаторы из базы данных, возвращаемой как byte[]
. Я хочу использовать эти идентификаторы (байтовые массивы) в качестве ключей к карте. По умолчанию это не работает, потому что сравнивается «равенство объектов», а не «равенство содержания».Использование String (byte []) в качестве ключа для отображения
Следующее, что я пробовал, который казался, чтобы работать, создает экземпляр строки с конструктором new String(byte[])
. Хотя это кажется для работы. Я знаю, что я делаю некоторые потенциально изворотливые вещи. Я не указываю кодировку, которая полагается на все системные значения по умолчанию. Я также не знаю, будут ли все байтовые последовательности иметь представление в каждой кодировке.
ли «преобразование» byte[]
в String
с целью делать map.put()
и map.get()
сейф? Есть ли крайние случаи, когда я не рассматриваю, где этот подход непреднамеренно создает столкновение (где 2 разных byte[]
с разным контентом могут стать такими же String
).
Примечание: Карта хранится в памяти и живет только для одного запуска приложения. Простой класс обертку я написал, чтобы сделать свою жизнь проще, если этот подход является жизнеспособным:
public class Cache {
Map<String, Set<String>> cache = new HashMap<String, Set<String>>();
public Cache() {}
public void put(byte[] key, Set<String> value) {
cache.put(new String(key), value);
}
public Set<String> get(byte[] key) {
return cache.get(new String(key));
}
}
Это похоже и может быть полезным: http://stackoverflow.com/questions/16839182/can-a-java-array-be-used-as-a-hashmap-key – Chop