管理很多对象时,如果采用数组这一类的线性表结构,在进行随机查找时效率将非常差,经常需要遍历整个线性表,随着被管对象的增多性能急剧下降。因此希望产生一种高效的管理方式,这时一般会用到哈希存储的方式。
使用哈希时被存储的对象需要提供一个哈希码(hash code),一般是一个整数值。hashCode方法的功能就是用来提供所在对象的哈希码,根据对象的不同哈希码的值有所不同。一般每定义一个新的类,都要为其重写一个合适的hashCode方法。
下图显示了哈希存储的工作原理。
进入哈希存储前,首先调用对象的hashCode方法获取哈希码,定位对象所在的哈希桶。在哈希桶内部,所有的哈希码相同的不同对象是按照线性表的方式存储的。
从上面的工作原理中可以看出。
(1)如果管理的对象很多,直接用线性表存储,查找的量非常大,而采用哈希以后,对哈希桶的定位是由计算一步完成的,与对象的个数无关,速度很快;
(2)在定位了哈希桶以后,只要保证桶里的对象个数不多,进行线性查找也是很快的。