当前位置: 首页 > news >正文

哈希表的学习

哈希表

散列表

散列(Hashing)通过散列函数(哈希函数)将需要参与检索的数据与散列值(哈希值)关联起来,生成一种便于搜索的数据结构,我们称其为散列表(哈希表)。

散列函数也加哈希函数,哈希函数可以对一个目标计算出其对应的哈希值,并且,只要是同一个目标,无论计算多少次,得到的哈希值都是一样的结果,不同的目标计算出的结果几乎都不同,哈希函数在现实生活中应用十分广泛,比如很多下载网站都提供下载文件的MD5码校验,可以用来判别文件是否完整,哈希函数多种多样,目前应用最为广泛的是SHA-1和MD5。

我们可以利用哈希值的特性,设计一张全新的表结构,这种表结构是专门为哈希设立的,我们称其为哈希表。我们可以将这些元素保存到哈希表中,而保存的位置则与其对应的哈希值有关,哈希值是通过哈希函数计算得到的,我们只需要将对应元素的关键字(一般是整数)提供给哈希函数就可以进行计算了,一般比较简单的哈希函数就是取模操作,哈希表长度是多少(长度最好是一个素数),模就是多少。

保存的数据是无序的,哈希表在查找时只需要进行一次哈希函数计算就能直接找到对应元素的存储位置,效率极高。

package com.test.collection;public class HashTable<E> {private final int TABLE_SIZE=10;private final Node[]TABLE=new Node[TABLE_SIZE];//放入头结点public HashTable(){for (int i = 0; i < TABLE_SIZE; i++)TABLE[i]=new Node<>(null);}//插入public void insert(E obj){int index=hash(obj);Node<E>head=TABLE[index];Node<E>node=new Node<>(obj);node.next=head.next;head.next=node;}//判断是否包含public boolean contains(E element){int index=hash(element);Node<E>node=TABLE[index].next;while (node!=null){if(node.element==element)return true;node=node.next;}return false;}private int hash(E obj){ //哈希函数,计算出存放的位置int hashCode=obj.hashCode();//每一个对象都有一个独一无二的哈希值,可以通过hashCode方法得到(极小概率出现相同情况)return hashCode%TABLE_SIZE;}public String toString(){StringBuilder builder=new StringBuilder();for (int i = 0; i < TABLE_SIZE; i++) {Node<E>head=TABLE[i].next;while (head!=null){builder.append(head.element+"->");head=head.next;}builder.append("\n");}return builder.toString();}private static class Node<E>{private final E element;private Node<E> next;private Node(E element){this.element=element;}}
}

http://www.xdnf.cn/news/62209.html

相关文章:

  • 基于RK3588+FPGA+AI YOLO的无人船目标检测系统(一)概述
  • 几何编码:启用矢量模式地理空间机器学习
  • OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比
  • 【Redis】SpringDataRedis
  • 【自然语言处理与大模型】模型压缩技术之量化
  • 在线查看【免费】avi,mov,rm,webm,ts,rm,mkv,mpeg,ogg,mpg,rmvb,wmv,3gp,ts,swf文件格式网站
  • Spring Boot 集成 Redis 实战总结
  • Idea中实用设置和插件
  • 系统架构师2025年论文《论基于UML的需求分析》
  • 项目实战 -- 发布管理
  • 把dll模块注入到游戏进程的方法_基于文件修改的注入方式
  • SQL语言的三大分类及其应用详解
  • 欧拉-国产操作系统替代产品如何
  • FreeRTOS中的优先级翻转问题及其解决方案:互斥信号量详解
  • ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之IS31FL3216)
  • DeepSeek+Cursor+Devbox+Sealos项目实战
  • IP精准检测“ipinfo”
  • Flask API 项目 Swagger 版本打架不兼容
  • ADC数据不稳定的解决方案
  • Java学习手册:HTTP 协议基础知识
  • 【Maven基础】
  • 霍尔效应的应用领域
  • QT 5.15 程序打包
  • 【无人机】无人机方向的设置,PX4飞控方向,QGC中设置飞控的方向/旋转角度。PX4使用手册飞行控制器/传感器方向
  • [原理分析]安卓15系统大升级:Doze打盹模式提速50%,续航大幅增强,省电提升率5%
  • Android Studio 国内镜像使用与 SDK 下载速度优化指南
  • list的学习
  • 超详细mac上用nvm安装node环境,配置npm
  • 基于RK3588+FPGA+AI YOLO全国产化的无人船目标检测系统(二)平台设计
  • Java 性能优化:如何利用 APM 工具提升系统性能?