java 集合

来源:互联网 发布:生产矩阵作业指导书 编辑:程序博客网 时间:2024/06/06 04:24

Set究竟如何使数据不重复的呢?

在Set的实现中,使用了Map的key唯一性来确保Set的值不重复

Map中的key又是如何确保重复验证的快速性及key值的唯一性呢?

利用了Hash算法来实现并达到这一目的。Hash算法又称为散列算法,其实Hash算法产生的目的很单纯,其发明的目的是提高海量数据的查找速度。

HashMap确实采用了Hash算法来提高查找key的速度,并且使用了equals()来判断是否重复

HashMap的put原理是这样的:
1、首先对key采用hashCode()方法进行散列化,就是将key转换生成一个int值,相同的key肯定会生成相同的int值,并对该int值进行hash计算得到hash值。
2、通过hash值得到Entry数组的下标,然后通过该下标,得到已经存入的数据,将已经存入的数据的key和hash进行比对,若相同证明是重复,则忽略。
3、若不相同,则通过addentry()方法将数据存入该数组的下标中,同时存入的还有key、hash值。

用一句话说来就是,通过待存入的key的hash值计算出数组的下标,并根据该下标提取已经存入的值,将两者进行比对,若相同则忽略,不同则put进去。

因为不同的key会产生不同的hash值,这也是为什么HashMap不排序的原因!

那么通过key提取值时,当然先要通过该key计算出hash值来,再通过这个hash值作为下标提取出对应的实体对象所容纳的value来。
同时加了必要的判断来确保提取出正确的数值来。

0 0
原创粉丝点击