Привет, я пытаюсь разработать фильтр цветения счета в java. я действительно искал большинство источников о фильтре цветения. То, что я понял, это когда мы хешируем (делаем хеширование) конкретной строкой или словом, результат хеширования вернет одно значение, чтобы мы могли сохранить контент в этом результирующем значении место. Но мой большой вопрос - как сделать хэширование (алгоритм). Что действительно происходит, когда мы используем конкретную строку или слово. Можете ли вы, пожалуйста, объяснить мне, что на самом деле происходит, когда мы хешируем конкретную строку или слово (Как то, как появляется конкретное конечное значение, когда мы делаем хэширование определенной строки или слова). Я также читаю, что есть также шансы на столкновение. Можете ли вы также указать, почему результирующее значение хэша не уникально (почему его иногда возвращает одно и то же значение хэша для разных входов). И действительно ли мне нужно написать код для хэширования или есть встроенные функции java для хеширования.Что действительно происходит (фактический процесс), когда мы используем конкретную строку или слово
Что действительно происходит (фактический процесс), когда мы используем конкретную строку или слово
ответ
Вы можете просто получить хеш-код, вызвав hashCode()
на любой объект. В частности, для класса String
из javadoc:
общественности Int() хэш-код
Возвращает хэш-код для этой строки. Хеш-код для объекта String вычисляется как
s [0] * 31^(n-1) + s [1] * 31^(n-2) + ... + s [n-1 ]
с использованием int арифметики, где s [i] является i-м символом строки, n - это длина строки, а^указывает на возведение в степень. (Значение пустой строки хэш равен нулю.)
Код выполняется для String
это одно:
public int hashCode() {
int h = hash;
int len = count;
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
Хэш является функцией (не биекция) и, следовательно, различные входы могут дают тот же результат. Это основы хэш-функций
«хеширования» является функцией
H: I -> O
Где обычно множество I
гораздо больше или более сложным, чем O
. В хэш-таблице I
- класс ваших элементов, а O
- множество положительных целых чисел. В частности, в цветном фильтре у вас есть n
различных функций. Чтобы разработать хеш-функцию, вам нужно извлечь различные характеристики похожих объектов. Например, для символьных строк вы можете иметь:
- длина
- первый символ
- количество вхождений определенного символа
- строка оценивается как полиномиальное
h(S) = sum (s(i)*31^i) mod d
При использовании множественного хеш-столкновения характеристик следует избегать, например, используя number of voyels
и number of non-voyels
не очень полезно.Есть некоторые особенности в хэш-функции должны быть, посмотрите на wikipedia entry
Java позволяет переопределить метод хэш-код() для ваших классов использовать алгоритм хэширования
public class Employee {
// Default implementation might want to use "name" for as part of hashCode
private String name;
@Override
public int hashCode() {
// We know that ID is always unique, so don't use name in calculating
// the hash code. & hashCode() is an int
return id;
}
}
* (если вы собираетесь для переопределения hashCode вы также должны переопределить равные.)
Хэш-код вычисляется на объект, хранящийся в коллекции. Он вычисляется с использованием стандартного алгоритма. Вы действительно можете переопределить метод хэш-кода на основе каждого объекта. Одним из способов реализации метода hashcode является использование HashcodeBuilder.
Надеюсь, это поможет. Найдите больше в переполнении стека, связанном с этой статьей, вы можете получить более подробные ответы.
- 1. Что именно происходит, когда мы используем ajax
- 2. Что происходит, когда мы используем updatepanel?
- 3. Когда мы (действительно) используем RenderScript?
- 4. Что происходит, когда мы произвольно используем ==?
- 5. Когда мы действительно используем Trie?
- 6. Что происходит, когда мы используем векторную стирание или вставку
- 7. Что именно происходит, когда мы используем функции mpi_send/receive?
- 8. Что происходит, когда мы используем this.setState() в ReactJS?
- 9. В PHP, что происходит в памяти, когда мы используем mysql_query
- 10. Что происходит, когда мы используем mail() в PHP?
- 11. Что происходит, когда мы используем прагма-пакет (1)?
- 12. Что происходит, когда процесс разветвляется?
- 13. Что лучше всего использовать volatile? И что происходит, когда мы используем локальную или формальную переменную?
- 14. Когда мы используем recyclerView.setHasFixedSize?
- 15. Когда мы используем Element? Когда мы используем Helper? Когда мы используем View Cells? в CakePHP 3
- 16. Когда мы используем MVVM?
- 17. Что означает #import? если мы используем #include, что происходит?
- 18. Что произошло, когда мы используем публикацию clickonce
- 19. Когда мы используем XMLSerialization?
- 20. Что происходит, когда мы запускаем класс PHP?
- 21. Что происходит, когда мы называем IUknown :: Release
- 22. Что действительно происходит, когда модули импортируются?
- 23. Когда мы используем поток, будет ли он работать как параллельный процесс или последовательный процесс на C#?
- 24. Что происходит в mockito и где мы его используем?
- 25. когда используем процедуру и когда мы используем функцию?
- 26. Когда действительно происходит привязка
- 27. Почему мы используем процесс, когда у нас есть потоки?
- 28. Когда мы используем сервис Windows?
- 29. Что происходит, когда мы вызываем метод ArrayList.add()?
- 30. Что именно происходит, когда мой процесс убит?
Пожалуйста, изучите тему немного, прежде чем задавать вопросы: http://en.wikipedia.org/wiki/Hash_function –
В фильтре цветения вам нужно больше одного хеша. – UmNyobe