Hashcode的小问题

HashSet\u7c7b\u548chashCode()\u65b9\u6cd5\u7684\u5c0f\u7591\u95ee\uff01

\u8981\u4e86\u89e3\u8fd9\u4e8b\u60c5\uff0c\u5c31\u5f97\u7406\u89e3HashSet\uff08\u8fd8\u6709HashMap\u7b49\u7b49\u7528hash\u503c\u7684\u7c7b\uff09\u7684\u539f\u7406\u4e86\u3002

HashSet\u662f\u4e00\u4e2a\u96c6\u5408\uff0c\u96c6\u5408\u7684\u7279\u70b9\u662f\u91cc\u9762\u4e0d\u80fd\u6709\u91cd\u590d\u7684\u5143\u7d20\uff0c\u6240\u4ee5\u5728\u5f80\u91cc\u52a0\u4e1c\u897f\u7684\u65f6\u5019\uff0c\u8fd9\u4e2a\u96c6\u5408\u5148\u5f97\u770b\u770b\u662f\u5426\u91cc\u9762\u6709\u8fd9\u4e48\u4e00\u4e2a\u5143\u7d20\u4e86\uff0c\u8fd9\u5c31\u7275\u6d89\u5230\u67e5\u627e\u3002\u5176\u4ed6\u7c7b\u578b\u7684\u805a\u5408\uff0c\u6bd4\u65b9\u8bf4\u4e00\u4e2aArrayList\uff0c\u4f60\u600e\u4e48\u77e5\u9053\u67d0\u4e1c\u897f\u662f\u4e0d\u662f\u5df2\u7ecf\u5728\u91cc\u9762\u4e86\uff1f\u4e00\u822c\u8bf4\u6765\u53ea\u6709\u4e00\u4e2a\u4e2a\u627e\u8fc7\u53bb\u5bf9\u6bd4\u3002\u53ef\u4ee5\u60f3\u8c61\u5982\u679c\u5143\u7d20\u5f88\u591a\u7684\u8bdd\u8fd9\u6548\u7387\u5f88\u4f4e\u3002\u6240\u4ee5\u8981\u60f3\u529e\u6cd5\u4f18\u5316\uff0c\u800c\u7528hash\u503c\u5c31\u662f\u8fd9\u6837\u4e00\u79cd\u4f18\u5316\u6cd5\u3002

\u5982\u679c\u628a\u805a\u5408\uff08Set,List\u4e4b\u7c7b\u7684\u4e1c\u897f\uff09\u770b\u4f5c\u662f\u56fe\u4e66\u9986\uff0c\u5fc5\u987b\u201c\u4e00\u4e2a\u4e2a\u627e\u8fc7\u53bb\u201d\u7684\u90a3\u79cd\u56fe\u4e66\u9986\u5c31\u662f\u4e66\u968f\u4fbf\u5806\u6210\u4e00\u5806\u7684\u56fe\u4e66\u9986\uff0c\u6bcf\u6b21\u6709\u4eba\u6765\u501f\u4e66\u4e86\uff0c\u7ba1\u7406\u5458\u542c\u5230\u540d\u5b57\uff0c\u5c31\u53bb\u4e00\u672c\u672c\u5730\u7ffb\uff0c\u8fd0\u6c14\u4e0d\u597d\u5f97\u51e0\u4e4e\u627e\u904d\u6240\u6709\u7684\u4e66\uff0c\u624d\u80fd\u627e\u5230\u8981\u627e\u7684\u3002

\u806a\u660e\u7684\u529e\u6cd5\u5f53\u7136\u662f\u5148\u628a\u4e66\u5206\u6210\u4e00\u4e9b\u7c7b\u522b\uff0c\u6bcf\u4e2a\u7c7b\u522b\u505a\u4e2a\u4e66\u67b6\uff0c\u5206\u95e8\u522b\u7c7b\u653e\u597d\uff0c\u8fd9\u6837\u6709\u4eba\u6765\u501f\u4e66\u4e86\uff0c\u4f60\u5148\u770b\u770b\u8fd9\u4e66\u662f\u5f52\u5230\u54ea\u7c7b\u7684\uff0c\u7136\u540e\u53bb\u90a3\u4e66\u67b6\u4e0a\u4e00\u672c\u672c\u627e\u3002\u867d\u7136\u8fd8\u662f\u4e00\u672c\u672c\u627e\uff0c\u53ef\u662f\u8fd9\u6b21\u8981\u627e\u7684\u8303\u56f4\u5c31\u5c0f\u591a\u4e86\u3002

hash\u503c\u5c31\u662f\u628a\u5bf9\u8c61\u5f52\u7c7b\u7684\u65b9\u6cd5\uff0c\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u4eba\u7c7b\u6709\u70b9\u4e0d\u597d\u7406\u89e3\uff0c\u4f46\u5bf9\u7535\u8111\u5f88\u5bb9\u6613\uff0c\u8fd9\u5c31\u591f\u4e86\u3002hash\u503c\u7684\u7279\u70b9\u662f\uff0c\u5bf9\u76f8\u540c\u7684\u5bf9\u8c61\uff0c\u503c\u603b\u662f\u76f8\u540c\u7684\uff08\u4e00\u672c\u4e66\u53ea\u80fd\u5f52\u5728\u4e00\u7c7b\uff09\uff0c\u4e0d\u540c\u7684\u5143\u7d20\u53ef\u80fd\u4e5f\u6709\u76f8\u540c\u7684hash\uff08\u591a\u672c\u4e66\u53ef\u80fd\u5f52\u5728\u540c\u4e00\u7c7b\uff09\u3002hash\u503c\u7684\u7b97\u6cd5\u662f\u5f88\u6709\u8bb2\u7a76\u7684\uff0c\u8981\u80fd\u5206\u7c7b\u5747\u5300\uff0c\u5426\u5219\u5927\u591a\u6570\u4e66\u67b6\u4e0a\u53ea\u4e00\u672c\u4e66\uff0c\u51e0\u4e4e\u6240\u6709\u4e66\u90fd\u5728\u67d0\u4e2a\u4e66\u67b6\u4e0a\uff0c\u90a3\u8ddf\u539f\u6765\u6ca1\u6709\u6548\u7387\u7684\u505a\u6cd5\u4e5f\u6ca1\u533a\u522b\u3002

\u8fd8\u6709\u4e00\u4e2a\u95ee\u9898\u662f\uff0chash\u503c\u7684\u53d6\u503c\u8303\u56f4\u5f88\u5927\uff0c\u6bd4\u5982java\u4e2dhashCode()\u8fd4\u56de\u7684\u662f\u4e00\u4e2aint\uff0c\u771f\u7684\u9488\u5bf9\u6bcf\u4e2ahash\u503c\u5206\u4e00\u7c7b\u7684\u8bdd\uff0c\u90a3\u5c31\u597d\u50cf\u56fe\u4e66\u9986\u91cc\u53ea\u6709\u51e0\u5343\u672c\u4e66\uff0c\u5374\u8981\u505a\u591a\u5c11\u4ebf\u4ebf\u4e2a\u4e66\u67b6\u4e00\u6837\uff0c\u5b9e\u5728\u6ca1\u5fc5\u8981\u4e5f\u4e0d\u53ef\u80fd\u3002\u6240\u4ee5\u8981\u53d6\u6a21\uff0c\u628a\u6a21\u4f5c\u4e3a\u5206\u7c7b\uff0c\u4ee5\u4fbf\u7f29\u5c0f\u5206\u7c7b\u7684\u6570\u76ee\uff0c\u6bd4\u5982\u4ee510\u4e3a\u6a21\uff0c\u90a3\u4e48hash\u503c\u662f1\uff0c11\uff0c21\uff0c100001\u7b49\u7b49\u7684\u539f\u672c\u4e0d\u662f\u4e00\u7c7b\u7684\uff0c\u90fd\u7b97\u662f\u540c\u7c7b\u7684\u4e1c\u897f\u4e86\uff0c\u4f46\u662f\u539f\u672chash\u503c\u662f11\u548c12\u7684\uff0c\u8fd8\u662f\u7b97\u4e0d\u540c\u7c7b\u7684\u4e1c\u897f\u3002\u4ee510\u4e3a\u6a21\u53ef\u4ee5\u770b\u4f5c\u662f\u505a10\u4e2a\u4e66\u67b6\u3002

\u5982\u679c\u4f60\u770bHashMap\u7684\u6e90\u7801\u7684\u8bdd\uff0c\u5c31\u4f1a\u53d1\u73b0\u8fd9\u4e2a\u6a21\u4e5f\u662f\u4f1a\u6839\u636e\u5143\u7d20\u4e2a\u6570\u53d8\u7684\uff0c\u5c31\u597d\u6bd4\u56fe\u4e66\u9986\u91cc\u5982\u679c\u53ea\u6709\u51e0\u5341\u672c\u4e66\uff0c\u90a3\u505a\u5341\u4e2a\u4e66\u67b6\u4e5f\u5dee\u4e0d\u591a\u4e86\uff0c\u6bcf\u4e2a\u4e66\u67b6\u4e0a\u5e73\u5747\u51e0\u672c\uff0c\u4f46\u662f\u5982\u679c\u4e66\u7684\u6570\u76ee\u5230\u6210\u5343\u4e0a\u4e07\u4e86\uff0c\u90a3\u6bcf\u4e2a\u4e66\u67b6\u4e0a\u5e73\u5747\u51e0\u767e\u4e0a\u5343\u672c\uff0c\u5c31\u5acc\u591a\u4e86\u70b9\uff0c\u4e8e\u662f\u6211\u4eec\u628a\u6a21\u6570\u589e\u5927\uff0c\u6bd4\u5982100\uff0c\u90a3\u4e48hash\u503c1\u548c11\u5c31\u4e0d\u662f\u540c\u7c7b\u4e86\uff0c\u4e5f\u5c31\u662f\u539f\u6765\u540c\u4e66\u67b6\u7684\u4e66\u88ab\u653e\u5230\u4e0d\u540c\u4e66\u67b6\u4e0a\u4e86\uff0c\u67e5\u8be2\u8d77\u6765\u5c31\u5feb\u4e86\u3002

1\u3001\u76d8\u7b26\u5199\u7684\u4e0d\u5bf9\u6240\u4ee5\u9009B
2\u3001c

return name.hashCode()+age;//这个什么意思,一直迭代吗?
不是迭代,每个类都继承自Object ,这个hashCode()方法是Object的方法,这里是重写hashCode方法,这个方法返回对象的hash码,是一个整数。原则上每个不同对象的hash码应该是不同的,这个在使用是为了确保对象的唯一性。
这里的意思是对于一个MyKey 对象,如果name和age中有一个不同,那么返回的hashCode就不一样。
希望我的回答对你有所帮助。

1:Object 类中 有十一个方法,
其中包括 hashCode() 方法。 返回值是一个整型数(次数与对象所在的内 存位置 关系密切)

2: java中Object类是 所有的类的父类(祖宗),所以,java中所有的类都会有hashCode()方法。

3:定义的类MyKey也是 Object类的子类。 所以 你在类中重写了hashCode()方法。

4: 你的定义的属性 name 是String 类的对象。
String类是Object类的子类。 所以String类中有hashCode()方法。
所以 你可以进行name.hashCode() 这样的操作(此时 你调用的是name对象的hashCode()方法。,而不是MyKey的hashCode()方法,要区分清楚。)。

5:你如果想调用你重写的hashCode()方法
则可以:
MyKey mk=new MyKey();
System.out.println(mk.hashCode());

6: 不知道 答案 是否 是你需要的。

public int hashcode()
{
return name.hashCode()+age;//这个什么意思,一直迭代吗?
}
这当然不是迭代了。迭代是自身调用自身,这里面是MyKey类的hashCode方法中
调用了name 对象的hashCode方法。name是字符串,当调用字符串的hashCode方法是会返回一个整数。
MyKey myKey = new MykKey("abc",10);
System.out.println("abc".hashCode());//字符串"abc"的hashcode
System.out.println(myKey.hashCode());
它打印的就是字符串"abc"的hashcode + age 的和,然后这个方法就结束了。

public int hashcode()
{
return hashCode()+age;//这个时候才叫迭代,自己不停的调用自己
}

public int hashcode()
{
return name.hashCode()+age;//这个什么意思,一直迭代吗?
}
这个是重写Object 类的hashcode()方法,非迭代。
不同的对象应该有不同的hashcode。重写hashcode()方法就是为了确保不同的对象的hashcode都不同。

首先你要弄清楚hashcode是个什么东西?
这就要理解数据结构中hash表的原理
和在java Object中的作用
一般hashcode是java自动生成的 用于比较2个对象是否相同
但是就算你Person p1=new Person("张三");Person p2=new Person("张三");
p1.equals(p2);相等吗? 在不重写hashcode的情况下是肯定不等的
你可以自己试一下 person就一个name属性
但是你可以重写hashcode方法
你可以使用eclipse自动重写对象的hashcode和equals方法
自己读了代码就清楚了
在eclipse中Alt+Shift+S override hashcode and equals

  • Hashcode鐨勫皬闂
    绛旓細涓嶆槸杩唬锛屾瘡涓被閮界户鎵胯嚜Object 锛岃繖涓hashCode()鏂规硶鏄疧bject鐨勬柟娉曪紝杩欓噷鏄噸鍐檋ashCode鏂规硶锛岃繖涓柟娉曡繑鍥炲璞$殑hash鐮侊紝鏄竴涓暣鏁般傚師鍒欎笂姣忎釜涓嶅悓瀵硅薄鐨刪ash鐮佸簲璇ユ槸涓嶅悓鐨勶紝杩欎釜鍦ㄤ娇鐢ㄦ槸涓轰簡纭繚瀵硅薄鐨勫敮涓鎬с傝繖閲岀殑鎰忔濇槸瀵逛簬涓涓狹yKey 瀵硅薄锛屽鏋渘ame鍜宎ge涓湁涓涓笉鍚岋紝閭d箞杩斿洖鐨刪ashCode灏变笉...
  • Java涓殑HashCode闂
    绛旓細1.hashcode鏄敤鏉ュ垽鏂袱涓瓧绗︿覆鏄惁鐩哥瓑鐨勪緷鎹,涓嶅悓鐨勫瓧绗︿覆涓嶅彲鑳芥湁鐩稿悓鐨刪ashcode,浣嗕笉鍚岀殑hashCode缁忚繃涓庨暱搴︾殑鍙栦綑锛屽氨寰堝彲鑳戒骇鐢熺浉鍚岀殑hashCode,灏辨槸鎵璋撶殑鍝堝笇鍐茬獊.2.鐩稿悓鐨勫瓧绗︿覆鐨刪ashcode涓嶅彲鑳戒笉鍚;3.hashcode鏄敱绠鍗曠殑Hash绠楁硶寰楀嚭鏉ョ殑,鏍规嵁瀛楃涓茬殑鍊肩畻鍑烘潵鐨,姣忔绠楀嚭鏉ョ殑缁撴灉閮界浉鍚 ...
  • 姹傛暀涓閬揓AVA棰樼洰
    绛旓細涓銆hashCode鏄绠楀嚭鏉ョ殑锛屾湁涓濂楄绠楀叕寮忋傛棦鐒舵槸鍏紡锛岄偅涔堬細瀹屽叏鏈夊彲鑳借緭鍏ヤ笉鍚岀殑鍙傛暟鑰屽緱鍒板悓涓涓粨鏋滐紝鎵浠ashCode鐩稿悓涓嶄唬琛ㄤ袱涓璞qual;濡傛灉涓や釜瀵硅薄equal锛屽嵆鍙傛暟涓鑷达紝寰楀埌鐨刪ashCode鑷劧鐩哥瓑銆傜粨璁猴細瀵硅薄equal鍒檋ashCode鐩哥瓑锛岃宧ashCode鐩哥瓑涓嶄唬琛ㄥ璞qual銆傛帓闄わ細A 浜屻丼ortedSet鏄氳繃Comparator...
  • Java hashCode() 闂
    绛旓細2)public int hashCode(){ return name.hashCode()+age;} 鏈潵Object涓殑hashCode()鏄繑鍥炲唴瀛樹腑鐨勫湴鍧,鍥犱负String瑕嗙洊浜嗚繖涓柟娉 鎵浠tring鐨刪ashCode()杩斿洖姝ゅ瓧绗︿覆鐨勫搱甯岀爜銆係tring 瀵硅薄鐨勫搱甯岀爜鏍规嵁浠ヤ笅鍏紡璁$畻锛歴[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] ,浣跨敤 int 绠楁硶...
  • java璇█hashcode鍜岀湡瀹炵墿鐞嗗湴鍧鐨勫叧绯讳互鍙婄浉鍏冲嚑涓闂
    绛旓細hashcode鍜岀墿鐞嗗湴鍧娌″叧绯伙紝鍙槸涓绉嶇害瀹氾紝骞堕潪寮哄埗鎬х殑銆備富瑕佹槸涓虹浉鍏冲搱甯岄泦鍚堝強杩愮畻鏈嶅姟鐨勩傚啀鍏蜂綋鐨勯儴鍒嗚鐪媕dk鍏充簬hashcode鐨勮В閲婁簡銆傜涓夛紝java娌℃湁鎸囬拡鎿嶄綔锛屼絾鍒板閮芥槸鎸囬拡鎿嶄綔锛屽嵆瀵硅薄鎿嶄綔锛屽嵆閫氳繃瀵硅薄鎿嶄綔鎸囬拡鍗崇墿鐞嗗湴鍧锛岃屾湰韬槸涓嶅彲浠ョ湅鍒扮墿鐞嗗湴鍧锛屼篃灏变笉鑳界洿鎺ユ搷浣滀簡锛屽叏閮戒氦缁檍vm浜嗐
  • java 涓hashCode鐨勯棶棰~
    绛旓細褰撲竴涓璞¤鍒涘缓鏃讹紝灏嗗湪 JVM 杩愯绌洪棿鐨勫爢鍐呭瓨涓鍒嗛厤涓鍧楀唴瀛橈紝鏉ュ瓨鏀 Integer(80) 杩欎釜瀹炰緥瀵硅薄锛岃繖閲岀殑 obj 涓嶆槸涓涓璞★紝鑰屾槸涓涓璞★紙Integer瀵硅薄锛夌殑寮曠敤绫诲瀷鍙橀噺锛屽紩鐢ㄧ被鍨嬪彉閲 JVM 浼氬湪鏍堝唴瀛樹腑缁欏畠鍒嗛厤涓鍧楀唴瀛樼┖闂达紝瀹冪殑鍊硷紙obj 鐨勫硷級鍏跺疄灏辨槸瀹冩寚鍚戠殑瀵硅薄寮曠敤鐨勫硷紙hashCode 鐨鍊...
  • Java涓叧浜巈quals()鍜hashCode()鐨勯棶棰
    绛旓細灏辨槸澶у鐨勪竴绉嶅叡璇, 渚夸簬浠ュ悗鐨勬嫇灞曞拰缁存姢.杩欐牱璇村惂, 浣犲鏋滃彧鏄祴璇, 閭d箞浣犻殢渚挎庝箞鍐欓兘琛, 浣犲彧瑕佷竴涓猠quals鏂规硶鑰屼笉绠hashcode, 杩欐牱OK, 娌闂, 绋嬪簭涓鏍疯兘璺戦.浣嗘槸, 濡傛灉浣犲啓浜唀quals鏂规硶, 鑰屼綘涓嶉噸鍐檋ashcode鏂规硶, 閭d箞鍦ㄤ娇鐢╤ashtable鎴杊ashset鐨勬椂鍊, 灏变細鍑虹幇寰堝涓嶅繀瑕佺殑閿欒.鑰屼笖.....
  • 鍝堝笇鐮鏈変粈涔堢敤
    绛旓細鐢辨鍙锛2涓竴鏍峰ぇ灏忕殑Integer瀵硅薄锛岃繑鍥炵殑鍝堝笇鐮涔熶竴鏍枫闂涓夛細鍝堝笇楠岃瘉鐮佹槸浠涔堬紵 hash锛堥煶璇戝搱甯岋級涓昏鐢ㄤ簬鏂囦欢鏍¢獙 楠岃瘉鏂囦欢鐨勫畬鏁存 鍝堝笇绠楁硶灏嗕换鎰忛暱搴︾殑浜岃繘鍒跺兼槧灏勪负鍥哄畾闀垮害鐨勮緝灏忎簩杩涘埗鍊硷紝杩欎釜灏忕殑浜岃繘鍒跺肩О涓哄搱甯屽笺傚搱甯屽兼槸涓娈垫暟鎹敮涓涓旀瀬鍏剁揣鍑戠殑鏁板艰〃绀哄舰寮忋傚鏋滄暎鍒椾竴娈垫槑鏂...
  • java 闂 hashcode 涓嶄竴鑷 equals鏂规硶杩樿兘涓虹湡?
    绛旓細棣栧厛锛宧ashset瀛樺偍鏄氳繃entry鏁扮粍瀹炵幇鐨勶紝鏁扮粍鐨勪竴涓厓绱犳寚鍚戜竴涓敱鐩稿悓hash鍊煎璞$粍鎴愮殑閾捐〃锛堜篃灏辨槸璇磋繖閲屽搱甯岃〃瑙e喅鍐茬獊鐨勬柟娉曢噰鐢ㄧ殑鏄媺閾炬硶锛夈傛墍浠ワ紝濡傛灉hash鍊间笉涓鑷达紝璇存槑杩欎釜hash鍊兼墍瀵瑰簲鐨勯摼琛ㄨ繕涓嶅瓨鍦紝鎵浠ョ洿鎺ュ姞杩涘幓灏辫銆傚鏋滀竴鑷达紝璇存槑宸茬粡瀛樺湪璇ラ摼琛紝閭e氨瑕佺湅杩欎釜key鏄惁宸茬粡瀛樺湪锛屽鏋滆繖涓...
  • java涓hashcode浠涔堟椂鍊欑敤?鎬庝箞鐢? 姹傝瑙
    绛旓細鎵浠ヨ繖閲屽瓨鍦ㄤ竴涓啿绐佽В鍐崇殑闂銆傝繖鏍蜂竴鏉ュ疄闄呰皟鐢╡quals鏂规硶鐨勬鏁板氨澶уぇ闄嶄綆浜嗭紝鍑犱箮鍙渶瑕佷竴涓ゆ銆傛墍浠ワ紝Java瀵逛簬eqauls鏂规硶鍜hashCode鏂规硶鏄繖鏍疯瀹氱殑锛1銆佸鏋滀袱涓璞$浉鍚岋紝閭d箞瀹冧滑鐨刪ashCode鍊间竴瀹氳鐩稿悓锛2銆佸鏋滀袱涓璞$殑hashCode鐩稿悓锛屽畠浠苟涓嶄竴瀹氱浉鍚 涓婇潰璇寸殑瀵硅薄鐩稿悓鎸囩殑鏄敤eqauls鏂规硶...
  • 扩展阅读:java hashcode ... hashcode手机版下载 ... hashcode 中文翻译 ... hashcode算号器 ... hanser哭着道歉 ... 获取hashcode什么意思 ... 请先获取hashcode ... 电子移证通hashcode ... 二建签名怎么获取hashcode ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网