Java中key可以重復的Map集合:IdentityHashMap

范例:Map中的key不允許重復,重復就是覆蓋

?

[java]?view plaincopy
  1. package?org.lxh.demo13.mapdemo;????
  2. import?java.util.HashMap;????
  3. import?java.util.Iterator;????
  4. import?java.util.Map;????
  5. import?java.util.Set;????
  6. class?Person?{????????????????????????????????
  7. //?定義Person類????
  8. ????private?String?name;?????????????????????
  9. //?定義name屬性????
  10. ????private?int?age;??????????????????????????
  11. //?定義age屬性????
  12. ????public?Person(String?name,?int?age)?{?????
  13. //?通過構造方法為屬性賦值????
  14. ????????this.name?=?name;?????????????????????
  15. //?為name屬性賦值????
  16. ????????this.age?=?age;???????????????????????
  17. //?為age屬性賦值????
  18. ????}????
  19. ????public?boolean?equals(Object?obj)?{??????
  20. //?覆寫equals()方法????
  21. ????????if?(this?==?obj)?{????????????????????
  22. //?判斷地址是否相等????
  23. ????????????return?true;??????????????????????
  24. //?返回true表示同一對象????
  25. ????????}????
  26. ????????if?(!(obj?instanceof?Person))?{???????
  27. //?傳遞進來的不是本類的對象????
  28. ????????????return?false;?????????????????????
  29. //?返回false表示不是同一對象????
  30. ????????}????
  31. ????????Person?p?=?(Person)?obj;??????????????
  32. //?進行向下轉型????
  33. ????????if?(this.name.equals(p.name)?&&??
  34. this.age?==?p.age)?{????
  35. ????????????return?true?;?????????????????????
  36. //?屬性依次比較,相等返回true????
  37. ????????}else{????
  38. ????????????return?false?;????????????????????
  39. //?屬性內容不相等,返回false????
  40. ????????}????
  41. ????}????
  42. ????public?int?hashCode(){??????????????????????
  43. //?覆寫hashCode()方法????
  44. ????????return?this.name.hashCode()?*?this.age?;????
  45. //?計算公式????
  46. ????}????
  47. ????public?String?toString()?{??????????????????????
  48. //?覆寫toString()方法????
  49. ????????return?"姓名:"?+?this.name?+?";年齡:"???
  50. +?this.age;???//?返回信息????
  51. ????}????
  52. }?????
  53. public?class?IdentityHashMapDemo01?{????
  54. ????public?static?void?main(String[]?args)?{????
  55. ????????Map<Person,?String>?map?=?null;??????????????
  56. //?聲明Map對象,指定????
  57. 泛型類型????
  58. ????????map?=?new?HashMap<Person,?String>();???????????
  59. //?實例化Map對象????
  60. ????????map.put(new?Person("張三",?30),?"zhangsan_1");????
  61. //?增加內容????
  62. ????????map.put(new?Person("張三",?30),?"zhangsan_2");?????
  63. //?增加內容,key重復????
  64. ????????map.put(new?Person("李四",?31),?"lisi");???????
  65. //?增加內容????
  66. ????????Set<Map.Entry<Person,?String>>?allSet?=?null;????
  67. //?聲明一個Set集合????
  68. ????????allSet?=?map.entrySet();????????????????????
  69. //?將Map接口實例變為????
  70. Set接口實例????
  71. ????????Iterator<Map.Entry<Person,?String>>???
  72. iter?=?null;????//?聲明Iterator????
  73. 對象????
  74. ????????iter?=?allSet.iterator();????????????????
  75. //?實例化Iterator????
  76. 對象????
  77. ????????while?(iter.hasNext())?{?????????????????
  78. //?迭代輸出????
  79. ????????????Map.Entry<Person,?String>?me?=???
  80. iter.next();//?每個對象都是Map.?????
  81. Entry實例????
  82. ????????????System.out.println(me.getKey()?????
  83. ????????????????????+?"?-->?"?+?me.getValue());????
  84. //?輸出key和value????
  85. ????????}????
  86. ????}????
  87. }???
?

程序運行結果:

[java]?view plaincopy
  1. 姓名:李四;年齡:31?-->?lisi????
  2. 姓名:張三;年齡:30?-->?zhangsan_2???
?

從程序的運行結果中可以發現,第二個內容覆蓋了第一個內容,所以此時可以使用Identity HashMap。使用此類時只要地址不相等(key1!=key2),就表示不是重復的key,可以添加到集合中。

范例:使用IdentityHashMap修改程序

[java]?view plaincopy
  1. package?org.lxh.demo13.mapdemo;????
  2. import?java.util.IdentityHashMap;????
  3. import?java.util.Iterator;????
  4. import?java.util.Map;????
  5. import?java.util.Set;????
  6. class?Person?{????
  7. ????//?此類與之前定義一樣,此處不再列出????
  8. }????
  9. public?class?IdentityHashMapDemo02?{????
  10. ????public?static?void?main(String[]?args)?{????
  11. ????????Map<Person,?String>?map?=?null;??????????
  12. //?聲明Map對象,指定????
  13. 泛型類型????
  14. ????????map?=?new?IdentityHashMap<Person,?String>();???
  15. //?實例化Map對象????
  16. ????????map.put(new?Person("張三",?30),?"zhangsan_1");???
  17. //?增加內容????
  18. ????????map.put(new?Person("張三",?30),?"zhangsan_2");????
  19. //?增加內容,key重復????
  20. ????????map.put(new?Person("李四",?31),?"lisi");??????
  21. //?增加內容????
  22. ????????Set<Map.Entry<Person,?String>>?allSet?=???
  23. null;???//?聲明一個Set集合????
  24. ????????allSet?=?map.entrySet();?????????????????
  25. //?將Map接口實例變為????
  26. Set接口實例????
  27. ????????Iterator<Map.Entry<Person,?String>>???
  28. iter?=?null;//?聲明Iterator對象????
  29. ????????iter?=?allSet.iterator();??????????????
  30. //?實例化Iterator????
  31. 對象????
  32. ????????while?(iter.hasNext())?{?????????????????
  33. //?迭代輸出????
  34. ????????????Map.Entry<Person,?String>?me?=???
  35. iter.next();//?每個對象都是Map.????
  36. Entry實例????
  37. ????????????System.out.println(me.getKey()?????
  38. ????????????????????+?"?-->?"?+?me.getValue());????
  39. //?輸出key和value????
  40. ????????}????
  41. ????}????
  42. }???
?

程序運行結果:

[java]?view plaincopy
  1. 姓名:張三;年齡:30?-->?zhangsan_2????
  2. 姓名:張三;年齡:30?-->?zhangsan_1????
  3. 姓名:李四;年齡:31?-->?lisi???
?

從程序的運行結果中可以發現,現在的key允許重復,只要兩個對象的地址不相等即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386085.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

牛客網筆記之數組(一)

最近開始在“牛客網”上做題&#xff0c;希望通過日積月累&#xff0c;每天記錄一點小知識&#xff0c;每天前進一小步。 今天練習的題目關于數組。 1. 數組存儲&#xff1a;鏈式存儲、順序存儲 線性表邏輯上是線性的&#xff0c;存儲上可以是順序的&#xff0c;可以是鏈式的…

社交網絡節點理論

1.頓巴數 每個人的朋友圈子對多能達到150個人。&#xff08;密友3-5人&#xff0c;好友30-50人&#xff0c;其他100-150人&#xff09;縱使高科技帶來的人際圈越來越大&#xff0c;但是人腦的容量是有限的&#xff0c;你也不可能和這么多人維持一定的人際關系&#xff08;沒有人…

瘋狂漲知識!Java多態實現原理技術總監都拍手叫好

##前言 多態是Java語言重要的特性之一&#xff0c;它允許基類的指針或引用指向派生類的對象&#xff0c;而在具體訪問時實現方法的動態綁定。Java對于方法調用動態綁定的實現主要依賴于方法表&#xff0c;但通過引用調用&#xff08;invokevitual&#xff09;和接口引用調用&am…

國內互聯網公司算法機器學習崗(阿里星)面試總結

從2015年8月到2015年10月&#xff0c;花了3個月時間找工作&#xff0c;先后通過內推參加了美團、阿里螞蟻金服、京東、騰訊、今日頭條、Growing IO、微軟這7個公司的面試&#xff0c;同時參加了網易游戲、LinkedI In中國這2個公司的筆試&#xff0c;拿到比較優質的offer是京東S…

瘋狂漲知識!「高并發秒殺」微信搶紅包實戰案例幫你突破瓶頸

推薦閱讀&#xff1a; 阿里二面涼經&#xff1a;設計模式緩存Spring虛擬機MySQL中間件并發等難題&#xff0c;全部迎刃而解阿里巴巴字節跳動那些大廠必問的HTTP該怎么學&#xff1f;我建議你看看這篇文章&#xff01;螞蟻、字節、PDD社招面經Java崗&#xff08;分布式線程安全…

2016面試——騰訊、螞蟻金服、蘑菇街

騰訊TST技術面&#xff1a; 先羅列一下問題吧: 編程語言編譯的過程 同樣的邏輯,golang的二進制代碼比C語言的二進制代碼長很多.試分析原因 項目 ,三個項目都有聊.因為現場面,可以用紙寫,所以描述的更清楚些 N * N的方格紙,里面有多少個正方形 兩個數組求交集 什么樣的…

Android開發;Activity-Hook你了解多少?一起來debug

享學課堂特邀作者&#xff1a;周周 轉載請聲明出處&#xff01; 前言 手把手講解系列文章&#xff0c;是我寫給各位看官&#xff0c;也是寫給我自己的。文章可能過分詳細&#xff0c;但是這是為了幫助到盡量多的人&#xff0c;畢竟工作5,6年&#xff0c;不能老吸血&#xff0c;…

牛客網筆記之JAVA運算符

計算機的最基本用途之一就是執行數學運算&#xff0c;作為一門計算機語言&#xff0c;Java也提供了一套豐富的運算符來操縱變量。我們可以把運算符分成以下幾組&#xff1a; 算術運算符 關系運算符 位運算符 邏輯運算符 賦值運算符 其他運算符 邏輯運算符結果 ~a是按位非&#…

Android架構師談:View-Pager-性能優化之-無限循環

作者&#xff1a;享學課堂Alvin老師 轉載請聲明出處&#xff01; ViewPager實現無限滑動 **方案一&#xff1a;**將viewpager上限設置成一個很大的數&#xff0c;第一個頁面設置到中間。然后滑動的時候&#xff0c;用當前的序號與viewpager頁面數取余得到目標頁面的序號&#…

你知道如何用面向對象思想寫好并發編程嗎?

在工作中&#xff0c;我發現很多人在設計之初都是直接按照單線程的思路來寫程序的&#xff0c;而忽略了本應該重視的并發問題&#xff1b;等上線后的某天&#xff0c;突然發現詭異的 Bug&#xff0c;再歷經千辛萬苦終于定位到問題所在&#xff0c;卻發現對于如何解決已經沒有了…

你知道怎么在生產環境下部署tomcat嗎?

享學課堂特邀作者&#xff1a;老顧 轉載請聲明出處&#xff01; 一、前言 小伙伴們在網上看到的很多文章&#xff0c;都是對tomcat的一些介紹&#xff0c;什么配置啊&#xff0c;怎么啟動。其實在生產環境中怎么部署&#xff0c;和網上介紹的有很大區別。這篇文章老顧就帶著大…

淺談HashMap

Java集合類的整體架構 比較重要的集合類圖如下&#xff1a; 有序否 允許元素重復否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是&#xff08;用二叉樹排序&#xff09; Map AbstractMap 否 使用 key-value 來映射和存儲數據&#xff0c; Key 必須惟…

matlab實現一元線性回歸和多元線性回歸

在回歸分析中,如果有兩個或兩個以上的自變量,就稱為多元回歸。事實上,一種現象常常是與多個因素相聯系的,由多個自變量的最優組合共同來預測或估計因變量,比只用一個自變量進行預測或估計更有效,更符合實際。 在實際經濟問題中,一個變量往往受到多個變量的影響。例如,家…

互聯網寒冬!“996”為什么還沒實行?我還等著早點下班呢!

“喊了十多個月的‘996’&#xff0c;說要實行‘996’&#xff0c;上班上到現在&#xff0c;影子都沒看到&#xff0c;我還能早點下班嗎&#xff1f;” 我一個在廣州上班的朋友小李&#xff0c;在我去廣州出差期間&#xff0c;與他聊天的時候發出了這樣的牢騷&#xff0c;我剛…

matlab求解常微分方程組/傳染病模型并繪制SIR曲線

看了很多關于傳染病模型的matlab程序,大都是繪制出兩條曲線(I、S)的,本文最大的不同是繪出SIR三條曲線。 先給出SIR微分方程組 函數文件: run的程序:

互聯網寒冬!技術站最全MySQL數據庫實戰規范

享學課堂特邀作者&#xff1a;老顧 轉載請聲明出處&#xff01; 前言 我們小伙伴們經常使用到mysql數據庫&#xff0c;一般就這么一用&#xff0c;很少會考慮mysql里面的細節問題&#xff0c;如sql語句的規范&#xff0c;或索引有沒有起到相應的效果&#xff0c;今天老顧就給大…

SQL求一個表中非重復數據及其出現的次數

mysql中&#xff0c;我們可以用distinct求不重復的數據有多少&#xff0c;也可以用group by。 這里有個例子&#xff0c;如下表sheet1&#xff0c;共有5411條數據 查詢語句 共有3446條不重復數據&#xff0c;每條不重復數據出現的次數在第二列顯示&#xff1a;

什么是微服務擴展性和高可用-可擴展性、高可用性和性能

歡迎關注專欄&#xff1a;Java架構技術進階。里面有大量batj面試題集錦&#xff0c;還有各種技術分享&#xff0c;如有好文章也歡迎投稿哦。 Overview 可擴展性、高可用性和性能 術語可擴展性、高可用性、性能和關鍵任務對于不同的組織或組織內的不同部門來說可能意味著不同的…

SQL實現當前行等于前面兩行數據之和

sql實現類似斐波那契數列的功能&#xff0c;即當前數據等于前面兩個數據之和&#xff0c;詳看本文例子 原表&#xff1a; sql語句&#xff08;此處要熟悉JION ON的用法&#xff09; 結果

【大牛系列教學】靠著這份面試題跟答案

開篇閑扯 打工人&#xff0c;打工魂&#xff0c;我們生而人上人。當“資本主義”逐漸禁錮我們人&#xff08;大&#xff09;上&#xff08;韭&#xff09;人&#xff08;菜&#xff09;肉體的時候&#xff0c;那一刻我才明白那個日不落帝國資本主義收割機瑞民族之光幸瑞幸咖啡…