如果两个对象的哈希码相同则他们不一定相同,如果对象一致则哈希码一定相同
String s1="hello world";
String s2=new String("hello world");
s1.hashCode()和s2.hashCode()其實(shí)是相等的。
hashCode()和equals()都是Object類(lèi)中的一個(gè)方法,String類(lèi)中重寫(xiě)了兩個(gè)方法,使得比較的是字符地址指向的內(nèi)容。
?
在集合中,set集合是不允許元素重復(fù)的,name如何保證元素不重復(fù)呢?
當(dāng)新添加一個(gè)元素的時(shí)候首先調(diào)用這個(gè)元素的hashCode方法,得到的哈希碼作為這個(gè)元素的存儲(chǔ)地址,如果這個(gè)地址上沒(méi)有元素,則直接存儲(chǔ)在這個(gè)地址上;如果這個(gè)地址上有元素,在調(diào)用equals方法比較,相同則不再存儲(chǔ),不相同的話就會(huì)產(chǎn)生沖突,會(huì)產(chǎn)生一個(gè)鏈接表,將這兩個(gè)元素串起來(lái)放在同一個(gè)哈希碼指定的位置上,而實(shí)際上會(huì)盡量避免哈希沖突。
如果直接調(diào)用equals方法,當(dāng)數(shù)據(jù)量過(guò)大時(shí),每次都會(huì)調(diào)用一次equals方法,效率低。
用hashCode方法比較減少對(duì)象比較次數(shù),提高查找效率。
總結(jié)
以上是生活随笔為你收集整理的如果两个对象的哈希码相同则他们不一定相同,如果对象一致则哈希码一定相同的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是哈希码?它的作用是什么?
- 下一篇: 如何快速开发一个古诗词小程序?