这段时间 在 准备软件设计师考试    目的是想复习一下  自己以前没怎么学的知识    在这个过程中  有了很大的收获  对以前不太懂得东西  在复习的过程中  有了很大程度的提高

比如在复习 程序语言的时候    对编译程序的处理过程和文法分析 有了全新的了解 作为一个半路出家  没学过程序语言这门课的我来说   有一种醍醐灌顶的感觉   以前在看 javaweb技术内幕是

对里面提的javac 的编译原理  看的真的是 云里雾里   哈哈哈   想想 也是醉了  最基础的程序语言 都没有看过  会想去理解javac 的编译原理

(编译程序 中间的处理过程 有 词法分析  语法分析  语义分析  中间代码生成  代码优化  目标代码生成   这次过程中   又有符号管理 和 出错处理 俩个过程贯穿其中    除此之外 还有汇编、解释程序系统等)

在 复习计算机网络的时候   对 SMTP 有了全新的认识  以前上课的时候只是粗略的学了一下  很多东西并没有搞懂   不知道  MIME是对 SMTP的 优化  传统的 SMTP 只能传输 ASCII类型的字符   MIME 及多用途Internet邮件扩充协议  它的最初的设定是为了增加邮件的功能  啊哈哈哈    还记得在 javaweb 中 的  这种 文传输类型吗   如   text/html  还有在文件上传的时候  添加的文件类型后缀

*****************************************************

正文    关于   哈希表   在 java 的 体系在 听的是 太多了  但是 对于  hash表    以前理解的并不是很多  只知道 这个很重要  在很多的地方 都听过  但是对于 底层的原理  自己 知道的真的是微乎其微

哈希表  在 数据结构的位置

作用在  查找的篇章   关于查找   的内容在软件设计师的教材上如下 和  数据结构(严蔚敏篇的内容差不多)

静态查找有 顺序查找   折半查找   分块查找(索引查找 )

动态查找有  二叉排序树 二叉平衡树  B-树   B+ 树   .....

哈希表 的 设立  也是为了便于查找    哈希表放在了静态和 动态的查找的 最后  为什么》???

说明哈希表的重要性?   是的

前面的不管是 静态查找 还是 动态查找  他们所记录在结构中的相对位置 是随机的 和记录的关键字之间不存在确定的关系  因此在查找的过程中  需要进行一系列的比较才能找到        要是理解这句话   差不多 就能明白 哈希表 设计的目的了吧    (前面的两种排序  如我们传统的排序  是在不确定里面数据的情况下  进行的比较   所以  它的查找时间 是和N 有关    而 哈希表 想要做的是  我能不能不进行比较你只要给我一个数据 我就知道 它在哈希表中的存储位置   )虽然他也没法做到  查询时间为 1    因为有冲突

关于 哈希函数的构造方法  如 直接定址法  数字分析法  平方取中法  随机数法 除留余数法等 这里就不一一说明了  仅简绍一下直接定址法

   它的方法时    取关键字的某个线性函数值为哈希地址  即:
H(key)=key  或 H(key)=a*key+b
其中a b 为常数  (这种哈希函数叫做自身函数   )
列如 统计每一个省份的人口数   可以将每个省份的编码设为 关键字  哈希函数取关键字本身 H(key)=key
 
这里着重说明一下 在构造哈希函数方法的之前  首先要明确什么是 好的 哈希函数 
若对于关键字集合中的任一个关键字,经哈希函数映像到地址集合中任何一个地址的概率都是相等的 , 则称此类哈希函数为均匀的哈希函数。  简而言之 就是 使用哈希函数的关键字  能够均匀的分配到哈希表的每一个位置   从而避免冲突
 

处理冲突的方法

1  开放定址法  

2  链地址法   它和开发地址发 有本质的差别   前一个是  为了 避免冲突而设定   这一个 是 ”接受冲突”

三个因素 : 哈希函数   处理冲突的方法     哈希表的填装因子

*****************************************************************************************************************************************************

上面说的 哈希表的内容   有很多不足之处     要想对哈希表 有更加深入的了解  十分建议 去 看看数据结构的  查找 的  相关 概念

自己 在 学习java的时候   走了很多的弯路  很多知识 都是 不太了解   知其然  不知其所以然    这是因为 对 很多 计算机的 基础概念的理解不太深入   或者是根本就不了解   在这种前提下  还想不断的去学习最前沿的技术   这显然是 不太明智的      因为楼盖的再高  如果根基不稳的话  很容易塌的  这也是为什么  对于考计算机研究生  要考  数据结构  计算机网络   操作系统   组成原理等 知识

这也是为什么校招那么喜欢问 一些基础的知识

因为对这些相对基础的知识不太了解的话  就很难去理解 那些已经封装好的东西  以及升华   比如   java虚拟机的知识  要是对计算机的底层 不太了解的话  理解java虚拟机的是相当吃力的  当然 远不止java这些......

所以 最后  希望 那些半路出家的 人   能一起去 学一点 这些 相对 底层的东西吧  虽然它们都相当枯燥 但是静下心去学 还是会有所收获的

查找-------(HashCode)哈希表的原理的更多相关文章

  1. 数据结构和算法(Golang实现)(26)查找算法-哈希表

    哈希表:散列查找 一.线性查找 我们要通过一个键key来查找相应的值value.有一种最简单的方式,就是将键值对存放在链表里,然后遍历链表来查找是否存在key,存在则更新键对应的值,不存在则将键值对链 ...

  2. HashMap/HashSet,hashCode,哈希表

    hash code.equals和“==”三者的关系 1) 对象相等则hashCode一定相等: 2) hashCode相等对象未必相等. == 是比较地址是否相等,JAVA中声明变量都是引用嘛,不同 ...

  3. 哈希表工作原理 (并不特指Java中的HashTable)

    1. 引言         哈希表(Hash Table)的应用近两年才在NOI中出现,作为一种高效的数据结构,它正在竞赛中发挥着越来越重要的作用.  哈希表最大的优点,就是把数据的存储和查找消耗的时 ...

  4. [数据结构 - 第8章] 查找之哈希表(C语言实现)

    首先是需要定义一个哈希表的结构以及一些相关的常数.其中 HashTable 就是哈希表结构.结构当中的 elem 为一个动态数组. #define HASHSIZE 12 // 定义哈希表长为数组的长 ...

  5. 哈希表原理及hashmap简单实现

    哈希表也叫做散列表.在各种语言中都有hashmap的实现.其最突出的优点是查找和插入以及删除具有常数的时间复杂度 我们可以把哈希表理解为数组+链表 数组具有常数复杂度的查找,为什么呢,因为数组是在内存 ...

  6. 自己动手实现 HashMap(Python字典),彻底系统的学习哈希表(上篇)——不看血亏!!!

    HashMap(Python字典)设计原理与实现(上篇)--哈希表的原理 在此前的四篇长文当中我们已经实现了我们自己的ArrayList和LinkedList,并且分析了ArrayList和Linke ...

  7. 哈希表(散列)HashTable实现

    近期刷Leetcode发现凡是找字符串中反复字符或者数组中找反复数据的时候就不知道从何下手了. 所以决定学习一下哈希表解题.哈希表的原理主要是解决分类问题,hash表是介于链表和二叉树之间的一种中间结 ...

  8. 【算法】哈希表的诞生(Java)

    参考资料 <算法(java)>                           — — Robert Sedgewick, Kevin Wayne <数据结构>       ...

  9. Java中哈希表(Hashtable)是如何实现的

    Java中哈希表(Hashtable)是如何实现的 Hashtable中有一个内部类Entry,用来保存单元数据,我们用来构建哈希表的每一个数据是Entry的一个实例.假设我们保存下面一组数据,第一列 ...

随机推荐

  1. 简易的CRM系统案例之SpringMVC+JSP+MySQL+myBatis框架版本

    主要对上一版DAO框架的替换hibernate变成myBatis 简易的CRM系统案例之SpringMVC+JSP+MySQL+hibernate框架版本 src/mybatis.xml <?x ...

  2. win7 安装 IIS 配置ASP 【原创】

    1.安装https://jingyan.baidu.com/article/5553fa8215f7ef65a2393413.html2.测试localhost  打开测试没问题3.配置网站--添加站 ...

  3. 41 Flutter 仿京东商城项目签名验证 增加收货地址、显示收货地址 事件广播

    加群452892873 下载对应41课文件,运行方法,建好项目,直接替换lib目录 AddressAdd.dart import 'package:dio/dio.dart'; import 'pac ...

  4. Linux 下kafka集群搭建

    主机的IP地址: 主机IP地址 zookeeper kafka10.19.85.149 myid=1 broker.id=110.19.15.103 myid=2 broker.id=210.19.1 ...

  5. 浅谈-对modbus的理解

    浅谈-对modbus的理解 一.简介 Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP ...

  6. tk mybatis动态sql中过滤不使用的字段

    实体字段如下 @Data @NoArgsConstructor @AllArgsConstructor @Builder /*** * app图标 */ @JsonFormat public clas ...

  7. tp5.1 where 时间查询

    $where_time = []; if ($_GET['s_time'] && !isset($_GET['e_time'])){ $where_time = ['add_time' ...

  8. Python3之使用枚举类

    当我们需要定义常量时,一个方法是用大写变量通过整数来定义,例如月份 JAN = 1 FEB = 2 MAR = 3 APR=4 May=5 Jun=6 Jul=7 Aug=8 Sep=9 Oct=10 ...

  9. Python3类和实例之获取对象信息

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型,有哪些方法呢 使用type() 判断对象类型使用type()函数 基本类型都可以用type()判断 <class 'int'> &g ...

  10. [转]NopCommerce中的多商店支持:权威指南

    [转]NopCommerce中的多商店支持:权威指南 多商店支持是最强大的nopCommerce功能之一.但究竟什么是多店支持?它是谁的?如何在nopCommerce中设置多个商店?在今天的帖子中,我 ...