如果两个对象的哈希码相同则他们不一定相同,如果对象一致则哈希码一定相同

简介: 用hashCode方法比较减少对象比较次数,提高查找效率。

String s1="hello world";


String s2=new String("hello world");


s1.hashCode()和s2.hashCode()其实是相等的。


hashCode()和equals()都是Object类中的一个方法,String类中重写了两个方法,使得比较的是字符地址指向的内容。



在集合中,set集合是不允许元素重复的,name如何保证元素不重复呢?


当新添加一个元素的时候首先调用这个元素的hashCode方法,得到的哈希码作为这个元素的存储地址,如果这个地址上没有元素,则直接存储在这个地址上;如果这个地址上有元素,在调用equals方法比较,相同则不再存储,不相同的话就会产生冲突,会产生一个链接表,将这两个元素串起来放在同一个哈希码指定的位置上,而实际上会尽量避免哈希冲突。


如果直接调用equals方法,当数据量过大时,每次都会调用一次equals方法,效率低。


用hashCode方法比较减少对象比较次数,提高查找效率。


目录
相关文章
|
6月前
|
存储 C++ 索引
哈希表、集合、映射
哈希表、集合、映射
|
1月前
|
存储 索引 Python
什么是可哈希对象,它的哈希值是怎么计算的?
什么是可哈希对象,它的哈希值是怎么计算的?
53 6
|
5月前
余三码和8421码的关系以及使用场景
余三码与8421码是两种不同的二进制编码方式,常用于表示十进制数。余三码是8421码加上3形成的无权码,具有自补性和进位信号特点,适合错误检测,但求和需修正。8421码是恒权码,方便二进制与十进制转换,常用于数字显示、数据传输和精确十进制运算。在计算机领域,两者各有应用场景,如BCD码用于七段显示器和精确计算,余三码则用于错误检测和简化算术操作逻辑设计。
|
6月前
|
存储 索引
DAY-2 | 哈希思想:求字符串包含的字符集合
这是一个关于代码实现的问题,主要展示了两种利用哈希思想去除字符串中重复字符的方法。第一种方法使用了`boolean[] flg`数组来标记字符是否出现过,遍历字符串时,如果字符未出现则添加到结果并标记为已出现。第二种方法使用`char[] ch`数组直接存储字符出现状态,先遍历一次字符串记录出现过的字符,再遍历一次输出未标记的字符。
30 0
|
算法 PHP 数据安全/隐私保护
为什么PHP的MD5可以将任意长度的数据映射为固定长度的哈希值?底层原理是什么?
为什么PHP的MD5可以将任意长度的数据映射为固定长度的哈希值?底层原理是什么?
266 0
|
存储 算法 Java
哈希函数
性质一:in的输入域无穷,比方说可以传入任意长度的字符串。但是在有些工程中也会给输入域规定范围。
178 0
哈希函数
|
存储 自然语言处理 算法
哈希函数相关的比较分析
哈希函数相关的比较分析
142 0
|
存储 算法 Serverless
哈希函数的理解
哈希函数的理解
哈希函数的理解
|
Shell Serverless C++
【LeetCode705】设计哈希集合(哈希)
0 <= key <= 10^6 最多调用 104 次 add、remove 和 contains 二、思路
123 0
【LeetCode705】设计哈希集合(哈希)
LeetCode 2085. 统计出现过一次的公共字符串(哈希)
LeetCode 2085. 统计出现过一次的公共字符串(哈希)
158 0