Java鎻愪緵浜哻ontainer classes鏉ヨВ鍐寵繖涓闂銆俢ontainer classes鍖呮嫭涓や釜閮ㄥ垎錛欳ollection鍜孧ap銆傚畠浠殑緇撴瀯鏄繖鏍風殑錛?/p>
鏈枃閲嶇偣浠嬬粛HashMap銆傞鍏堜粙緇嶄竴涓嬩粈涔堟槸Map銆傚湪鏁扮粍涓垜浠槸閫氳繃鏁扮粍涓嬫爣鏉ュ鍏跺唴瀹圭儲寮曠殑錛岃屽湪Map涓垜浠氳繃瀵硅薄鏉ュ瀵硅薄榪涜绱㈠紩錛岀敤鏉ョ儲寮曠殑瀵硅薄鍙仛key錛屽叾瀵瑰簲鐨勫璞″彨鍋歷alue銆傚湪涓嬫枃涓細鏈変緥瀛愬叿浣撹鏄庛?/p>
鍐嶆潵鐪嬬湅HashMap鍜孴reeMap鏈変粈涔堝尯鍒侶ashMap閫氳繃hashcode瀵瑰叾鍐呭榪涜蹇熸煡鎵撅紝鑰孴reeMap涓墍鏈夌殑鍏冪礌閮戒繚鎸佺潃鏌愮鍥哄畾鐨勯『搴忥紝濡傛灉浣犻渶瑕佸緱鍒頒竴涓湁搴忕殑緇撴灉浣犲氨搴旇浣跨敤TreeMap錛圚ashMap涓厓绱犵殑鎺掑垪欏哄簭鏄笉鍥哄畾鐨勶級銆?/p>
涓嬮潰灝辮榪涘叆鏈枃鐨勪富棰樹簡銆傚厛涓句釜渚嬪瓙璇存槑涓涓嬫庢牱浣跨敤HashMap:
import java.util.*;
public class Exp1 { class Ctime{ |
鍦℉ashMap涓氳繃get()鏉ヨ幏鍙杤alue錛岄氳繃put()鏉ユ彃鍏alue錛孋ontainsKey()鍒欑敤鏉ユ楠屽璞℃槸鍚﹀凡緇忓瓨鍦ㄣ傚彲浠ョ湅鍑猴紝鍜孉rrayList鐨勬搷浣滅浉姣旓紝HashMap闄や簡閫氳繃key绱㈠紩鍏跺唴瀹逛箣澶栵紝鍒殑鏂歸潰宸紓騫朵笉澶с?/p>
鍓嶉潰浠嬬粛浜嗭紝HashMap鏄熀浜嶩ashCode鐨勶紝鍦ㄦ墍鏈夊璞$殑瓚呯被Object涓湁涓涓狧ashCode()鏂規硶錛屼絾鏄畠鍜宔quals鏂規硶涓鏍鳳紝騫朵笉鑳介傜敤浜庢墍鏈夌殑鎯呭喌錛岃繖鏍鋒垜浠氨闇瑕侀噸鍐欒嚜宸辯殑HashCode()鏂規硶銆備笅闈㈠氨涓捐繖鏍蜂竴涓緥瀛愶細
import java.util.*;
public class Exp2 { class Element{ class Figureout{ |
鍦ㄨ繖涓緥瀛愪腑錛孍lement鐢ㄦ潵绱㈠紩瀵硅薄Figureout,涔熷嵆Element涓簁ey錛孎igureout涓簐alue銆傚湪Figureout涓殢鏈虹敓鎴愪竴涓誕鐐規暟錛屽鏋滃畠姣?.5澶э紝鎵撳嵃鈥淥K!鈥濓紝鍚﹀垯鎵撳嵃鈥淚mpossible!鈥濄備箣鍚庢煡鐪婨lement(3)瀵瑰簲鐨凢igureout緇撴灉濡備綍銆?/p>
緇撴灉鍗村彂鐜幫紝鏃犺浣犺繍琛屽灝戞錛屽緱鍒扮殑緇撴灉閮芥槸鈥淣ot found鈥濄備篃灝辨槸璇寸儲寮旹lement(3)騫朵笉鍦℉ashMap涓傝繖鎬庝箞鍙兘鍛紵
鍘熷洜寰楁參鎱㈡潵璇達細Element鐨凥ashCode鏂規硶緇ф壙鑷狾bject錛岃孫bject涓殑HashCode鏂規硶榪斿洖鐨凥ashCode瀵瑰簲浜庡綋鍓嶇殑鍦板潃錛屼篃灝辨槸璇村浜庝笉鍚岀殑瀵硅薄錛屽嵆浣垮畠浠殑鍐呭瀹屽叏鐩稿悓錛岀敤HashCode錛堬級榪斿洖鐨勫間篃浼氫笉鍚屻傝繖鏍峰疄闄呬笂榪濊儗浜嗘垜浠殑鎰忓浘銆傚洜涓烘垜浠湪浣跨敤HashMap鏃訛紝甯屾湜鍒╃敤鐩稿悓鍐呭鐨勫璞$儲寮曞緱鍒扮浉鍚岀殑鐩爣瀵硅薄錛岃繖灝遍渶瑕丠ashCode()鍦ㄦ鏃惰兘澶熻繑鍥炵浉鍚岀殑鍊箋傚湪涓婇潰鐨勪緥瀛愪腑錛屾垜浠湡鏈沶ew Element(i) (i=5)涓幝燛lement test=new Element(5)鏄浉鍚岀殑錛岃屽疄闄呬笂榪欐槸涓や釜涓嶅悓鐨勫璞★紝灝界瀹冧滑鐨勫唴瀹圭浉鍚岋紝浣嗗畠浠湪鍐呭瓨涓殑鍦板潃涓嶅悓銆傚洜姝ゅ緢鑷劧鐨勶紝涓婇潰鐨勭▼搴忓緱涓嶅埌鎴戜滑璁炬兂鐨勭粨鏋溿備笅闈㈠Element綾繪洿鏀瑰涓嬶細
class Element{ 聽聽聽聽聽int number; 聽聽聽聽聽public Element(int n){ 聽聽聽聽聽聽聽聽聽聽number=n; 聽聽聽聽聽} 聽聽聽聽聽public int hashCode(){ 聽聽聽聽聽聽聽聽聽聽return number; 聽聽聽聽聽} 聽聽聽聽聽public boolean equals(Object o){ 聽聽聽聽聽聽聽聽聽聽return (o instanceof Element) && (number==((Element)o).number); 聽聽聽聽聽} } |
鍦ㄨ繖閲孍lement瑕嗙洊浜哋bject涓殑hashCode()鍜宔quals()鏂規硶銆傝鐩杊ashCode()浣垮叾浠umber鐨勫間綔涓篽ashcode榪斿洖錛岃繖鏍峰浜庣浉鍚屽唴瀹圭殑瀵硅薄鏉ヨ瀹冧滑鐨刪ashcode涔熷氨鐩稿悓浜嗐傝岃鐩杄quals()鏄負浜嗗湪HashMap鍒ゆ柇涓や釜key鏄惁鐩哥瓑鏃朵嬌緇撴灉鏈夋剰涔夛紙鏈夊叧閲嶅啓equals()鐨勫唴瀹瑰彲浠ュ弬鑰冩垜鐨勫彟涓綃囨枃绔犮婇噸鏂扮紪鍐橭bject綾諱腑鐨勬柟娉?銆嬶級銆備慨鏀瑰悗鐨勭▼搴忚繍琛岀粨鏋滃涓嬶細
h2:
Get the result for Element:
Impossible!
璇瘋浣忥細濡傛灉浣犳兂鏈夋晥鐨勪嬌鐢℉ashMap錛屼綘灝卞繀欏婚噸鍐欏湪鍏剁殑HashCode()銆?/p>
榪樻湁涓ゆ潯閲嶅啓HashCode()鐨勫師鍒欙細
鑷充簬絎簩鏉″師鍒欑殑鍏蜂綋鍘熷洜錛屾湁鍏磋叮鑰呭彲浠ュ弬鑰傿ruce Eckel鐨勩奣hinking in Java銆嬶紝鍦ㄩ偅閲屾湁瀵笻ashMap鍐呴儴瀹炵幇鍘熺悊鐨勪粙緇嶏紝榪欓噷灝變笉璧樿堪浜嗐?/p>
鎺屾彙浜嗚繖涓ゆ潯鍘熷垯錛屼綘灝辮兘澶熺敤濂紿ashMap緙栧啓鑷繁鐨勭▼搴忎簡銆備笉鐭ラ亾澶у娉ㄦ剰娌℃湁錛宩ava.lang.Object涓彁渚涚殑涓変釜鏂規硶錛歝lone()錛宔quals()鍜宧ashCode()铏界劧寰堝吀鍨嬶紝浣嗗湪寰堝鎯呭喌涓嬮兘涓嶈兘澶熼傜敤錛屽畠浠彧鏄畝鍗曠殑鐢卞璞$殑鍦板潃寰楀嚭緇撴灉銆傝繖灝遍渶瑕佹垜浠湪鑷繁鐨勭▼搴忎腑閲嶅啓瀹冧滑錛屽叾瀹瀓ava綾誨簱涓篃閲嶅啓浜嗗崈鍗冧竾涓囦釜榪欐牱鐨勬柟娉曘傚埄鐢ㄩ潰鍚戝璞$殑澶氭佹р斺旇鐩栵紝Java鐨勮璁¤呭緢浼橀泤鐨勬瀯寤轟簡Java鐨勭粨鏋勶紝涔熸洿鍔犱綋鐜頒簡Java鏄竴闂ㄧ函OOP璇█鐨勭壒鎬с?/p>
Java鎻愪緵鐨凜ollection鍜孧ap鐨勫姛鑳芥槸鍗佸垎寮哄ぇ鐨勶紝瀹冧滑鑳藉浣夸綘鐨勭▼搴忓疄鐜版柟寮忔洿涓虹伒媧伙紝鎵ц鏁堢巼鏇撮珮銆傚笇鏈涙湰鏂囪兘澶熷澶у鏇村ソ鐨勪嬌鐢℉ashMap鏈夋墍甯姪銆?