Ê×Ò³ Ê«´Ê ×Öµä °å±¨ ¾ä×Ó ÃûÑÔ ÓÑ´ð ÀøÖ¾ ѧУ ÍøÕ¾µØÍ¼
µ±Ç°Î»ÖÃ: Ê×Ò³ > ½Ì³ÌƵµÀ > ¿ª·¢ÓïÑÔ > ±à³Ì >

Javaѧϰ֮HashMap: ΪɶҪͬʱʵÏÖhashCode()ºÍequals()

2012-12-21 
Javaѧϰ֮HashMap: ΪʲôҪͬʱʵÏÖhashCode()ºÍequals()ÎÊÌâÀ´×ÔJava±à³Ì˼Ïë(µÚËİæµÚ17ÕÂ)µÄÒ»¸öÀý×Ó

Javaѧϰ֮HashMap: ΪʲôҪͬʱʵÏÖhashCode()ºÍequals()

ÎÊÌâÀ´×ÔJava±à³Ì˼Ïë(µÚËİæµÚ17ÕÂ)µÄÒ»¸öÀý×Ó¡£

?

¿¼ÂÇÒ»¸öÌìÆøÔ¤±¨ÏµÍ³£¬½«GroundhogÓëPrediction¶ÔÏóÁªÏµÆðÀ´¡£´´½¨ÕâÁ½¸öÀ࣬ʹÓÃGroundhog×÷Ϊ¼ü£¬Prediction×÷Ϊֵ¡£ÒÔÏÂÊÇÀ´×ÔÊéÉϵĴúÂë¡£

?

?Õâ¶Î´úÂëÊ×ÏÈʹÓÃGroundhogºÍÓëÖ®Ïà¹ØÁªµÄPredictionÌî³äHashMap£¬È»ºó´òÓ¡´ËHashMap£¬ÒÔ±ã¿ÉÒÔ¹Û²ìËüÊÇ·ñ±»ÌîÈëÁËһЩÄÚÈÝ¡£ È»ºóʹÓñêʶÊý×ÖΪ3µÄGroundhog×÷Ϊ¼ü£¬²éÕÒÓëÖ®¶ÔÓ¦µÄPrediction¡£

?

Õâ¶Î´úÂë²»ÄÜÕýÈ·¹¤×÷¡£ ËüÎÞ·¨ÕÒµ½Êý×Ö3Õâ¸ö¼ü¡£ ÎÊÌâÔÚÓÚGroundhog×Ô¶¯¼Ì³Ð×Ô»ùÀàObject£¬ËùÒÔÕâÀïʹÓÃObjectµÄhashCode()·½·¨Éú³ÉÉ¢ÁÐÂ룬 ¶øËüĬÈÏÊÇʹÓöÔÏóµÄµØÖ·¼ÆËãÉ¢ÁÐÂë¡£ Òò´Ë£¬ Groundhog(3)Éú³ÉµÄµÚÒ»¸öʵÀýµÄÉ¢ÁÐÂëÓëÓÉGroundhog(3)Éú³ÉµÄµÚ¶þ¸öʵÀýµÄÉ¢ÁÐÂëÊDz»Í¬µÄ£¬ ¶øÎÒÃÇʹÓúóÕß²éÕÒ£¬µ±È»ÕÒ²»µ½¡£

?

¿ÉÄÜÄãÈÏΪ£¬Ö»ÐèÒª±àдǡµ±µÄhashCode()·½·¨¸²¸Ç°æ±¾¼´¿É¡£µ«ÊÇËüÈÔÈ»ÎÞ·¨Õý³£ÔËÐУ¬³ý·ÇÄãͬʱ¸²¸Çequals()·½·¨£¬ËüÒ²ÊÇObjectµÄÒ»²¿·Ö¡£ HashMapʹÓÃequals()Åжϵ±Ç°µÄ¼üÊÇ·ñÓë±íÖдæÔڵļüÏàͬ¡£?

?

ÄÇô£¬ ÕâÀïÌá³öÒ»¸öÎÊÌ⣬Ϊʲô¸²¸ÇhashCode()·½·¨µÄͬʱ£¬»¹ÐèÒª¸²¸Çequals()·½·¨

?

Ö±½Ó¿´HashMapµÄÔ´Âë¿ÉÒÔÕÒµ½´ð°¸¡£Ö÷ÒªÊÇËüµÄget(Object key)·½·¨¡£

?

    public V get(Object key) {        if (key == null)            return getForNullKey();        int hash = hash(key.hashCode());        for (Entry<K,V> e = table[indexFor(hash, table.length)];             e != null;             e = e.next) {            Object k;            if (e.hash == hash && ((k = e.key) == key || key.equals(k)))                return e.value;        }        return null;    }

?¿ÉÒÔ¿´µ½get(Object key)·½·¨µÄ¹ý³ÌÆäʵºÜ¼òµ¥£¬±éÀúHashMapµÄÄÚ²¿Î¬»¤µÄEntryÊý×飬ÕÒµ½Æ¥ÅäµÄÄ¿±êEntry²¢·µ»ØÆävalue¼´¿É¡£ Æ¥ÅäµÄ±ê×¼ÊÇ£º

    EntryµÄhashÖµÊÇ·ñÓë²ÎÊýkeyµÄhashÖµÏàµÈ¡£ (ÕâÒªÇóÎÒÃDZØÐëÕýȷʵÏÖ×÷ΪkeyµÄ¶ÔÏóµÄhashCode()·½·¨)EntryµÄkeyÊÇ·ñÓë²ÎÊýkeyΪͬһ¶ÔÏ󣬻òÕßEntryµÄkey"µÈÓÚ"²ÎÊýkey¡£ (×¢ÒâÊÇ·ñ"µÈÓÚ"£¬ ÊÇͨ¹ýµ÷ÓòÎÊýkeyµÄequals()·½·¨À´Íê³ÉµÄ£¬ ÕâÒªÇóÎÒÃDZØÐëÕýȷʵÏÖ×÷ΪkeyµÄ¶ÔÏóµÄequals()·½·¨)

Ã÷°×ÒÔÉÏÕâÁ½¸ö¹Ø¼üµã£¬¾Í²»ÄѽâÊÍΪʲôΪʲô¸²¸ÇhashCode()·½·¨µÄͬʱ£¬»¹ÐèÒª¸²¸Çequals()·½·¨ÁË

?

ÈȵãÅÅÐÐ