1、當(dāng)向集合Set中增加對(duì)象時(shí),首先集合計(jì)算要增加對(duì)象的hashCode碼,根據(jù)該值來(lái)得到一個(gè)位置用來(lái)存放當(dāng)前對(duì)象,擋在該位置沒(méi)有一個(gè)對(duì)象存在的話,那么集合Set認(rèn)為該對(duì)象在集合中不存在,直接增加進(jìn)去。如果在該位置有一個(gè)對(duì)象存在的話,接著將準(zhǔn)備增加到集合中的對(duì)象與該位置上的對(duì)象進(jìn)行equals方法比較,如果該equals方法返回false,那么集合認(rèn)為集合中不存在該對(duì)象,在進(jìn)行一次散列,將該對(duì)象放到散列后計(jì)算出的新地址里,如果equals方法返回true,那么集合認(rèn)為集合中已經(jīng)存在該對(duì)象了,不會(huì)再將該對(duì)象增加到集合中了。 2、重寫equals方法的時(shí)候必須重寫hashCode方法。如果一個(gè)類的兩個(gè)對(duì)象,使用equals方法比較時(shí),結(jié)果為true,那么該兩個(gè)對(duì)象具有相同的hashCode。原因是equals方法為true,表明是同一個(gè)對(duì)象,它們的hashCode當(dāng)然相同。 3、Ojbect類的hashCode方法返回的是Object對(duì)象的內(nèi)存地址??梢酝ㄟ^(guò)Integer.toHexString(new Object().hashCode);來(lái)得到。 |
|