IdentityHashMap类:增加相同Key(键)内容的结果

Posted 美好的明天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IdentityHashMap类:增加相同Key(键)内容的结果相关的知识,希望对你有一定的参考价值。

正常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

正常输出重复的结果!

以上是关于IdentityHashMap类:增加相同Key(键)内容的结果的主要内容,如果未能解决你的问题,请参考以下文章

容器--IdentityHashMap

java中key值可以重复的map:IdentityHashMap

IdentityHashMap数据结构

初学Java IdentityHashMap实现类 三十三

允许Key重复的Map - IdentityHashMap

java map key可以重复吗