正常Map操作中,key是不能重復的。
先看使用HashMap()操作,增加相同Key內容的結果:
先看代碼:
package 類集; 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 test1{ public static void main(String args[]){ Map<Person,String> map = null ; // 聲明Map對象 map = new HashMap<Person,String>() ; 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() ; Iterator<Map.Entry<Person,String>> iter = null ; iter = allSet.iterator() ; while(iter.hasNext()){ Map.Entry<Person,String> me = iter.next() ; System.out.println(me.getKey() + " --> " + me.getValue()) ; } } };
輸出結果:
姓名:張三,年齡:30 --> zhangsan_2
姓名:李四,年齡:31 --> lisi
可見,HashMap()操作的時候,key內容是不能重復的,當新增相同key的內容時候,新增內容會替換掉原來的key的內容。
要想key內容能夠重復(指的是兩個對象的地址不一樣,key1!=key2)。則要使用IdentityHashMap類。
替換掉HashMap后的結果:
package 類集; import java.util.HashMap; import java.util.IdentityHashMap; 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 test1{ public static void main(String args[]){ Map<Person,String> map = null ; // 聲明Map對象 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 ; // 准備使用Set接收全部內容 allSet = map.entrySet() ; Iterator<Map.Entry<Person,String>> iter = null ; iter = allSet.iterator() ; while(iter.hasNext()){ Map.Entry<Person,String> me = iter.next() ; System.out.println(me.getKey() + " --> " + me.getValue()) ; } } };
輸出結果:
姓名:張三,年齡:30 --> zhangsan_1 姓名:李四,年齡:31 --> lisi 姓名:張三,年齡:30 --> zhangsan_2
正常輸出重復的結果!