咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          Hash code

          Posted on 2010-03-03 16:03 oathleo 閱讀(1693) 評(píng)論(4)  編輯  收藏 所屬分類: Java
          如果兩個(gè)對(duì)象equal,那么它們的hashCode值一定要相同;2、如果兩個(gè)對(duì)象的hashCode相同,它們并不一定equal

          當(dāng)Set要添加新的元素時(shí),先調(diào)用這個(gè)元素的hashCode方法,就一下子能定位到它應(yīng)該放置的物理位置上。如果這個(gè)位置上沒(méi)有元素,它就可以直接存儲(chǔ)在 這個(gè)位置上,不用再進(jìn)行任何比較了;如果這個(gè)位置上已經(jīng)有元素了,就調(diào)用它的equals方法與新元素進(jìn)行比較,相同的話就不存了,不相同就散列其它的地址。

          所以兩個(gè)不equal的對(duì)象,有相同的hash,是可以存進(jìn)Set的。

          class HashNode {
              int id;
             
              public HashNode(int id){
                  this.id = id;
              }
             
              public int hashCode() {
                  return id;
              }
             
              public boolean equals(Object obj) {
                  return false;
              }
          }

          public class HashTest {

              public static void main(String[] args) {
                  HashNode n1 = new HashNode(1);
                  HashNode n2 = new HashNode(1);
                 
                  HashMap map = new HashMap();
                  map.put(n1, "111");
                  map.put(n2, "222");
                 
                  System.out.println(n1.equals(n2));
                  System.out.println(n1.hashCode() == n2.hashCode());
                  System.out.println(map.keySet().size());
              }

          }

          Feedback

          # re: Hash code  回復(fù)  更多評(píng)論   

          2010-03-16 21:42 by 張貝貝
          比較兩個(gè)對(duì)象是不是得重寫equals方法???

          # re: Hash code  回復(fù)  更多評(píng)論   

          2010-03-17 08:41 by oathleo
          @張貝貝
          比較 是指?如果是內(nèi)容的比較 肯定是要重寫了。這種情況也是最常見(jiàn)的。
          當(dāng)然如果單純比較 內(nèi)存地址(或者說(shuō)對(duì)象引用本身) 就沒(méi)有必要了

          # re: Hash code  回復(fù)  更多評(píng)論   

          2010-03-17 20:31 by 張貝貝
          嗯,很對(duì),再問(wèn)一點(diǎn),內(nèi)存地址一樣,是不是內(nèi)容就一定一樣了?

          # re: Hash code  回復(fù)  更多評(píng)論   

          2010-03-18 18:24 by oathleo
          @張貝貝
          門牌號(hào)一樣,房子里面的人必然的一樣。
          主站蜘蛛池模板: 长沙市| 聊城市| 郑州市| 渭源县| 庄浪县| 龙泉市| 张家界市| 卓尼县| 盘锦市| 阆中市| 富平县| 建水县| 保康县| 汉川市| 盘山县| 阿合奇县| 霍城县| 中牟县| 化德县| 南部县| 黑龙江省| 延寿县| 铜梁县| 和龙市| 广南县| 平湖市| 道孚县| 肇州县| 盐亭县| 旅游| 顺昌县| 中宁县| 廊坊市| 明光市| 胶州市| 颍上县| 缙云县| 宁安市| 无棣县| 凌海市| 霍林郭勒市|