日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/11/30 java 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中key可以重复的Map集合:IdentityHashMap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

[java]?view plaincopy
  • package?org.lxh.demo13.mapdemo;????
  • import?java.util.HashMap;????
  • import?java.util.Iterator;????
  • import?java.util.Map;????
  • import?java.util.Set;????
  • class?Person?{????????????????????????????????
  • //?定義Person類????
  • ????private?String?name;?????????????????????
  • //?定義name屬性????
  • ????private?int?age;??????????????????????????
  • //?定義age屬性????
  • ????public?Person(String?name,?int?age)?{?????
  • //?通過構造方法為屬性賦值????
  • ????????this.name?=?name;?????????????????????
  • //?為name屬性賦值????
  • ????????this.age?=?age;???????????????????????
  • //?為age屬性賦值????
  • ????}????
  • ????public?boolean?equals(Object?obj)?{??????
  • //?覆寫equals()方法????
  • ????????if?(this?==?obj)?{????????????????????
  • //?判斷地址是否相等????
  • ????????????return?true;??????????????????????
  • //?返回true表示同一對象????
  • ????????}????
  • ????????if?(!(obj?instanceof?Person))?{???????
  • //?傳遞進來的不是本類的對象????
  • ????????????return?false;?????????????????????
  • //?返回false表示不是同一對象????
  • ????????}????
  • ????????Person?p?=?(Person)?obj;??????????????
  • //?進行向下轉型????
  • ????????if?(this.name.equals(p.name)?&&??
  • this.age?==?p.age)?{????
  • ????????????return?true?;?????????????????????
  • //?屬性依次比較,相等返回true????
  • ????????}else{????
  • ????????????return?false?;????????????????????
  • //?屬性內容不相等,返回false????
  • ????????}????
  • ????}????
  • ????public?int?hashCode(){??????????????????????
  • //?覆寫hashCode()方法????
  • ????????return?this.name.hashCode()?*?this.age?;????
  • //?計算公式????
  • ????}????
  • ????public?String?toString()?{??????????????????????
  • //?覆寫toString()方法????
  • ????????return?"姓名:"?+?this.name?+?";年齡:"???
  • +?this.age;???//?返回信息????
  • ????}????
  • }?????
  • public?class?IdentityHashMapDemo01?{????
  • ????public?static?void?main(String[]?args)?{????
  • ????????Map<Person,?String>?map?=?null;??????????????
  • //?聲明Map對象,指定????
  • 泛型類型????
  • ????????map?=?new?HashMap<Person,?String>();???????????
  • //?實例化Map對象????
  • ????????map.put(new?Person("張三",?30),?"zhangsan_1");????
  • //?增加內容????
  • ????????map.put(new?Person("張三",?30),?"zhangsan_2");?????
  • //?增加內容,key重復????
  • ????????map.put(new?Person("李四",?31),?"lisi");???????
  • //?增加內容????
  • ????????Set<Map.Entry<Person,?String>>?allSet?=?null;????
  • //?聲明一個Set集合????
  • ????????allSet?=?map.entrySet();????????????????????
  • //?將Map接口實例變為????
  • Set接口實例????
  • ????????Iterator<Map.Entry<Person,?String>>???
  • iter?=?null;????//?聲明Iterator????
  • 對象????
  • ????????iter?=?allSet.iterator();????????????????
  • //?實例化Iterator????
  • 對象????
  • ????????while?(iter.hasNext())?{?????????????????
  • //?迭代輸出????
  • ????????????Map.Entry<Person,?String>?me?=???
  • iter.next();//?每個對象都是Map.?????
  • Entry實例????
  • ????????????System.out.println(me.getKey()?????
  • ????????????????????+?"?-->?"?+?me.getValue());????
  • //?輸出key和value????
  • ????????}????
  • ????}????
  • }???
  • ?

    程序運行結果:

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

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

    范例:使用IdentityHashMap修改程序

    [java]?view plaincopy
  • package?org.lxh.demo13.mapdemo;????
  • import?java.util.IdentityHashMap;????
  • import?java.util.Iterator;????
  • import?java.util.Map;????
  • import?java.util.Set;????
  • class?Person?{????
  • ????//?此類與之前定義一樣,此處不再列出????
  • }????
  • public?class?IdentityHashMapDemo02?{????
  • ????public?static?void?main(String[]?args)?{????
  • ????????Map<Person,?String>?map?=?null;??????????
  • //?聲明Map對象,指定????
  • 泛型類型????
  • ????????map?=?new?IdentityHashMap<Person,?String>();???
  • //?實例化Map對象????
  • ????????map.put(new?Person("張三",?30),?"zhangsan_1");???
  • //?增加內容????
  • ????????map.put(new?Person("張三",?30),?"zhangsan_2");????
  • //?增加內容,key重復????
  • ????????map.put(new?Person("李四",?31),?"lisi");??????
  • //?增加內容????
  • ????????Set<Map.Entry<Person,?String>>?allSet?=???
  • null;???//?聲明一個Set集合????
  • ????????allSet?=?map.entrySet();?????????????????
  • //?將Map接口實例變為????
  • Set接口實例????
  • ????????Iterator<Map.Entry<Person,?String>>???
  • iter?=?null;//?聲明Iterator對象????
  • ????????iter?=?allSet.iterator();??????????????
  • //?實例化Iterator????
  • 對象????
  • ????????while?(iter.hasNext())?{?????????????????
  • //?迭代輸出????
  • ????????????Map.Entry<Person,?String>?me?=???
  • iter.next();//?每個對象都是Map.????
  • Entry實例????
  • ????????????System.out.println(me.getKey()?????
  • ????????????????????+?"?-->?"?+?me.getValue());????
  • //?輸出key和value????
  • ????????}????
  • ????}????
  • }???
  • ?

    程序運行結果:

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

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

    總結

    以上是生活随笔為你收集整理的Java中key可以重复的Map集合:IdentityHashMap的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。