HashSet集合是不能允许同一个对象多次放入,那么HashSet如何判断这个元素是否存在呢?
如果一个一个进行比较,元素个数少还好,但是一万个,也要一个一个比较吗?这样效率太低了,所以哈希算法由此而生。
哈希算法:内存被分成了一个一个大致相当的区域,每一个区域有一个编号,当进行存放对象时,给每一个对象一个哈希码,通过对哈希码进行技术,例如对哈希码取余,获得的值就是内存区域的编号,而对象就放入这个空间中,那么当需要比较时,先从对象获得哈希码,然后计算出对象应该存放的内存区域,取出这个区域内的对象调用equals()方法进行比较,这样效率就极大的提高了,进行比较的操作就只会发生在一片区域内。但是这就需要保证不同对象的哈希值不一样,所以Object类中有一个获得哈希值的方法:hashCode()。 |
|