Java 中的哈希函数是作为一种以整数形式定义和返回对象值的解决方案而创建的,作为哈希函数输出而获得的返回值称为哈希值。每个哈希函数都会返回一个 4 字节的整数作为对象的返回值。任意两个相同类型的对象将具有相同的整数值作为哈希函数的输出,同样,不同的对象将具有不同的哈希值。无法从哈希值推导出对象,这使得哈希函数成为不可逆函数。
什么是哈希函数?
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
哈希函数可以定义为返回与对象对应的整数值的函数。哈希函数始终为同一对象返回相同的整数值。哈希函数返回的整数值称为哈希值。以下是有关哈希函数的要点:
以下是哈希函数的常见应用:
几乎每种编程语言都包含基于哈希的数据结构。例如,java包含基于Hash函数的Hash表、Hash Map、Hash Set、Tree Set数据结构。这些数据结构是键值设计,其中每个键都是唯一的,而多个键可以存在相同的值。
该算法用于数据完整性检查。该算法将任意长度的消息作为输入,并生成固定长度(128 位)的数据作为输出。消息摘要算法的示例包括 MD2、MD4、MD5 和 MD6。
该算法用于数据安全,并用于安全套接字层 (SSL) 等应用程序和协议中。 SHA-0、SHA-1、SHA-2 和 SHA-3 是安全哈希算法的常见类别。
让我们考虑一个登录场景,其中当输入密码来验证用户身份时,会计算输入密码的哈希值,并通过网络发送到存储原始密码哈希值的服务器。这样做是为了确保当密码从客户端发送到服务器时不会进行嗅探。
由于编程语言中使用不同的关键字,为了区分这些关键字和标识符,编译器使用通过哈希表实现的哈希集来存储所有这些关键字和标识符。
它是一种搜索算法,利用散列来搜索给定字符串中的一个或多个模式。它是最常用的算法之一。
这些接口包含用于一次比较两个对象的函数。这些函数的返回值可能是负数、零或正数,具体取决于给定对象是小于、等于还是大于我们要比较的对象。内部比较器和可比较接口使用哈希函数来相互比较对象。
优先级队列与遵循 FIFO(先进先出)顺序的普通队列不同。在优先级队列中,元素根据其优先级按自定义顺序排列,这是使用基于哈希函数的可比较和比较器内部实现的。
以下是创建哈希函数的一些一般设计原则:
public int hashCode (){ //Logic goes here }
当两个或多个对象返回相同的哈希值时,就会发生哈希冲突。让我们举一个以键值对形式存储数据的 java 哈希映射的例子。当我们将一个对象放入哈希映射时,会计算键的哈希值,并根据该哈希值找到存储值对象的桶位置。具有不同哈希值的对象必须放入不同的桶中。当两个或多个对象具有相同的哈希值时,它们会使用称为链表的附加数据结构存储在同一存储桶位置中。所有具有相同哈希值的对象都使用链表链接在一起。这种机制称为链接。以下是哈希函数处理冲突的方法:
以下是哈希的优点:
除了优点之外,哈希也有一些局限性:
以上是Java 中的哈希函数的详细内容。更多信息请关注PHP中文网其他相关文章!