生活随笔
收集整理的這篇文章主要介紹了
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?{???????????????????????????????? ?? ????private?String?name;????????????????????? ?? ????private?int?age;?????????????????????????? ?? ????public?Person(String?name,?int?age)?{????? ?? ????????this.name?=?name;????????????????????? ?? ????????this.age?=?age;??????????????????????? ?? ????}???? ????public?boolean?equals(Object?obj)?{?????? ?? ????????if?(this?==?obj)?{???????????????????? ?? ????????????return?true;?????????????????????? ?? ????????}???? ????????if?(!(obj?instanceof?Person))?{??????? ?? ????????????return?false;????????????????????? ?? ????????}???? ????????Person?p?=?(Person)?obj;?????????????? ?? ????????if?(this.name.equals(p.name)?&&?? this.age?==?p.age)?{???? ????????????return?true?;????????????????????? ?? ????????}else{???? ????????????return?false?;???????????????????? ?? ????????}???? ????}???? ????public?int?hashCode(){?????????????????????? ?? ????????return?this.name.hashCode()?*?this.age?;???? ?? ????}???? ????public?String?toString()?{?????????????????????? ?? ????????return?"姓名:"?+?this.name?+?";年齡:"??? +?this.age;????? ????}???? }????? public?class?IdentityHashMapDemo01?{???? ????public?static?void?main(String[]?args)?{???? ????????Map<Person,?String>?map?=?null;?????????????? ?? 泛型類型???? ????????map?=?new?HashMap<Person,?String>();??????????? ?? ????????map.put(new?Person("張三",?30),?"zhangsan_1");???? ?? ????????map.put(new?Person("張三",?30),?"zhangsan_2");????? ?? ????????map.put(new?Person("李四",?31),?"lisi");??????? ?? ????????Set<Map.Entry<Person,?String>>?allSet?=?null;???? ?? ????????allSet?=?map.entrySet();???????????????????? ?? Set接口實例???? ????????Iterator<Map.Entry<Person,?String>>??? iter?=?null;?????? 對象???? ????????iter?=?allSet.iterator();???????????????? ?? 對象???? ????????while?(iter.hasNext())?{????????????????? ?? ????????????Map.Entry<Person,?String>?me?=??? iter.next();?? Entry實例???? ????????????System.out.println(me.getKey()????? ????????????????????+?"?-->?"?+?me.getValue());???? ?? ????????}???? ????}???? }???
?
程序運行結果:
[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?=?new?IdentityHashMap<Person,?String>();??? ?? ????????map.put(new?Person("張三",?30),?"zhangsan_1");??? ?? ????????map.put(new?Person("張三",?30),?"zhangsan_2");???? ?? ????????map.put(new?Person("李四",?31),?"lisi");?????? ?? ????????Set<Map.Entry<Person,?String>>?allSet?=??? null;????? ????????allSet?=?map.entrySet();????????????????? ?? Set接口實例???? ????????Iterator<Map.Entry<Person,?String>>??? iter?=?null;?? ????????iter?=?allSet.iterator();?????????????? ?? 對象???? ????????while?(iter.hasNext())?{????????????????? ?? ????????????Map.Entry<Person,?String>?me?=??? iter.next();?? Entry實例???? ????????????System.out.println(me.getKey()????? ????????????????????+?"?-->?"?+?me.getValue());???? ?? ????????}???? ????}???? }???
?
程序運行結果:
[java]?view plaincopy
姓名:張三;年齡:30?-->?zhangsan_2???? 姓名:張三;年齡:30?-->?zhangsan_1???? 姓名:李四;年齡:31?-->?lisi???
?
從程序的運行結果中可以發現,現在的key允許重復,只要兩個對象的地址不相等即可。
總結
以上是生活随笔為你收集整理的Java中key可以重复的Map集合:IdentityHashMap的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。