Я хотел бы хэшировать большое количество int[]
в Java.Мои массивы содержат пути от корня до узлов в дереве (узлы нумеруются), поэтому они очень похожи на первые значения (так как все пути происходят от корня).
Я использую Google Guava Hasher , я добавляю каждое значение моего массива в хеш, чтобы получить hashCode:
HashFunction hashFunction = Hashing.murmur3_128();
Hasher hasher = hashFunction.newHasher();
for (int i: myArray) {
hasher.putInt(i);
}
int hashCode = inthasher.hash().asInt();
Я бы хотел избежать хэшированиявесь массив снова для каждого пути и только хэшируйте последние значения, добавляя последние значения в копию моего хэша.Например:
anotherHasher = hasher.clone();
anotherHasher.putInt(someInt);
int hashCode = hasher.hash().asInt();
int anotherHashCode = anotherHasher.hash().asInt();
Но метод клонирования не существует для Hasher
.
. Сохранит ли этот тип копии время вычисления?Можно ли реализовать Cloneable
с помощью оболочки, содержащей Hasher
, даже если последняя не является клонируемой?Если да, то как?Есть ли другой способ?
РЕДАКТИРОВАТЬ: Что касается записей, то для хэширования с помощью Guava требуется не добавление элементов с hasher.putInt(someInt)
, а само хеширование, вызываемое в конце с hasher.hash()
,Так что даже глубокое копирование было быстрым (что не так, см. Ответ Томаша Линковски), мой подход не имеет значения и не заслуживает дальнейшего изучения.