1. 程式人生 > >如果兩個對象的哈希碼相同則他們不一定相同,如果對象一致則哈希碼一定相同

如果兩個對象的哈希碼相同則他們不一定相同,如果對象一致則哈希碼一定相同

set ring 和equal 調用 equals equals方法 產生 每次 set集合

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方法比較減少對象比較次數,提高查找效率。

如果兩個對象的哈希碼相同則他們不一定相同,如果對象一致則哈希碼一定相同