hash
有个叫hashCode的方法。有个叫hashTable的玩意。你看下hashTable的代码吧。
有个叫hashCode的方法。有个叫hashTable的玩意。你看下hashTable的代码吧。
解决方案 »
- Java3D 添加文字的问题
- 最近部门招应聘生,老大叫我们几个找一些题。于是我找了一个,老大说还不错!!
- 如何避免使用Date过期了的构造函数?
- java.lang.UnsatisfiedLinkError什么问题啊,求救
- java连接oracle报错:java.sql.SQLException: ORA-04031: unable to allocate 4200 bytes of shared memory ("shared pool","unknown obje
- 线程中访问某个类中静态hashTable变量中的数据结果为null
- 关于JTable的问题
- 还有60分就升级了,激动呀!
- ★怎样写一个定时自动运行的applet,同时让它耗一大部分内存!??
- 关于Runtime.exec的问题
- 一个关于内存泄露的问题
- 如何获取Java.awt的父组件和子组件?
哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。
哈希
通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。
原来hash是一个短的key值,来代替原有的对象,这样查询的效率就会高非常多的倍数。
也可以用在通信方面,比如两个系统有相同的hash函数,这样就不需要传递大的对象,只需要传递hash值给对方,然后,对方在根据hash函数本地计算出对象。
觉得很棒。
是你到学校学生处找人,学生处的工作人员可能会拿出学生名单,一个一个的查找,
最终告诉你,学校没这个人,并说张三丰几百年前就已经在武当山作古了。可如果你
找对了人,比如在操场上找那些爱运动的同学,人家会告诉你,"哦,你找张三丰呀,
有有有,我带你去。于是他把你带到了体育馆内,并告诉你,那个教大家打太极的小
伙子就是张三丰',原来"张三丰.是因为他太极拳打得好而得到的外号。
学生处的老师找张三丰,那就是顺序表查找,依赖的是姓名关键字的比较。而通
过爱好运动的同学询问时,没有遍历,没有比较,就凭他们"欲找太极'张三丰',必
在体育馆当中"的经验,直接告诉你位置。
也就是说,我们只需要通过某个函数f,使得
存储位置=f (关键字)
那样我们可以通过查找关键字不需要比较就可获得需要的记录的存储位置。这就
是一种新的存储技术一一散列技术(哈希算法)。
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得
每个关键字key 对应一个存储位置f (key)。查找时,根据这个确定的对应关系找到
给定值key 的映射f (key) ,若查找集合中存在这个记录,则必定在f (key) 的位
置上。
这里我们把这种对应关系f 称为散列函数, 又称为哈希(Hash) 函数。按这个思
想,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列
表或哈希表(Hash table)。 那么关键字对应的记录存储位置我们称为散列地址。
整个散列过程其实就是两步。
(1) 在存储时,通过散列函数计算记录的散列地址,并按此散列地址存储该记
录。
(2) 当查找记录时,我们通过同样的散列函数计算记录的散列地址,按此散列地
址访问该记录。由于存取用的是同一个散列函数, 因此结果当然也是相同的。
所以说,散列技术既是一种存储方法,也是一种查找方法。然而它与线性表、
树、图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用
连线图示表示出来,而散列技术的记录之间不存在什么逻辑关系,它只与关键字有关
联。因此,散列主要是面向查找的存储结构。
我们时常会碰到两个关键字key1 != key2,但是却有f(key1) = f(key2),这种现象
我们称为哈希冲突,如果没有哈希冲突,散列表是一种非常高效的查找数据结构,
其时间复杂度为O(1);
这里简单列举常见的查找方法:
顺序表查找:
有序查找:
折半查找
插值查找
斐波那契查找
线性索引查找:
稠密索引
分块索引
倒排索引
二叉排序树动态查找:
平衡二叉树(AVL树)
多路查找树(B树)
http://blog.csdn.net/sc6231565/article/details/25653349