好久没看数据结构了,现在也打不起精神来,翻了一下书,严蔚敏那本书。,以下是书的第9章,发现自己很多时候对知识的认识无法结构化和系统化,都是零散的,模糊的混乱的记忆,以后要有体系,
第9章 查找
9.1 静态查找表
9.1.1 顺序表的查找
9.1.2 有序表的查找
9.1.3 静态树表的查找
9.1.4 索引顺序表的查找
9.2 动态查找表
9.2.1 二叉排序树和平衡二叉树
9.2.2 b-树和b 树
9.2.3 键树
9.3 哈希表
9.3.1 什么是哈希表
9.3.2 哈希函数的构造方法
9.3.3 处理冲突的方法
9.3.4 哈希表的查找及其分析
我们可以看到。哈希表 是查找这章的。
哈希表用来快速查找的,我们知道快速查找,在数据库中就是索引,在数据库中确实有hash索引,在hashmap中可以根据key快速查找,同时java中的hashcode是干什么用的?好了,什么事哈希表呢?
1.从数据扯起
数组中可以根据下表快速定位地址
假设 int a[]={1,2,3,4};
我们立马可以通过a[0]获得1,根据下标快速的找到了第0个元素的位置。
2.哈希表的引入
1.哈希表就是一个数组。 数组要多大呢?如果当前数据增多了,当前数组不够用了咋办?如何扩张
2.根据key快速定位到数组的位置,如何定位(hash函数);在数组中key 就是 0,1,2。但是遗憾的是key并不是那么简单,比如 key是String类型呢?如何根据key快速找到它的位置呢? 如何定义一个hash函数。
总之将key转化为数组下标,这是最重要的。
3hash函数的设计方法
http://www.cnblogs.com/sooner/archive/2013/04/19/3031087.html
目的:要根据key尽可能的均匀的映射到数组中。
1:平方取中法(知道就行)
取关键字平方后的中间几位为哈希地址。
2.除留余数法(==最常用的方法)
通常来说,最后一步都用这个方法,index=key%p; 对数组长度取余数
3、随机数法(知道就行)
随机确定地址
其他的自己查吧。
4.冲突解决(开放地址法和拉链法)
(a)拉链法: 就是数组加链表 hashmap就是这样实现的
(b)开放地址法:线性探测,和二次探测
http://www.cnblogs.com/dolphin0520/archive/2012/09/28/2700000.html
这是一个粗略的知识架构,后面细一点学习