equals()
需要逐个比较,速度较慢1个值和n个进行比较,时间复杂度为O(n)
用equals()比较,可以得到两个对象是否相同
hashCode()
当运用 hashCode() 时,判断是否有相同元素的代价,只是一次哈希计算,时间复杂度为O(1),提高了运行速度
hashCode()不同的输入值,经过哈希函数的计算,可能得到相同的返回值
Java 程序设计中一个重要原则:
当equals()返回值为true时,hashCode()返回的结果相同,
hashCode()返回的结果相同时,equals()返回值不一定为true
通常在处理唯一性时
先通过hashCode()处理,如果得到的返回值不冲突,则直接插入,如果冲突,则通过equals()进行比较,equals()返回true,则说明数据已插入,返回false,则插入
==和equals()
在Object 两者没有区别
public boolean equals(Object obj) {
return (this == obj);
}
在String中进行了重写,仅仅是值比较
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}