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

正常输出重复的结果!

时间: 2024-10-25 12:38:59

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

IdentityHashMap类源码解析

IdentityHashMap 1.内部通过数组存储键值对,相邻元素存在键值对 比如:i 位置是key,i+1位置是value 2.当hashcode相等,出现冲突的时候,通过线性探索发解决冲突问题 3.比较的是引用相等 IdentityHashMap与常用的HashMap的区别是: 前者比较key时是"引用相等"而后者是"对象相等",即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等,而HashMap只有在k1.equals(k2

通过key键读取到配置文件中对应的值的接口实现

/*********************************************************************  * Author  : Samson  * Date    : 03/13/2015  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

警察和厨师为Polic类和Cook类增加了对象成员,请扩充代码

/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:郭辉 *完成时间:2016年5月10日 *版 本 号:v1.0 * *问题描述:项目-警察和厨师为Polic类和Cook类增加了对象成员,请扩充代码. *输入描述:无. *程序输出:信息. */ #include<iostream> #include <string> using namespace std; class Person

使用jQuery增加或删除元素(内容)

使用jQuery增加或删除元素(内容):一.jQuery添加元素或内容:1,append() 方法:在被选元素的结尾插入元素或内容 2,prepend() 方法:被选元素的开头插入元素或内容. 3,after() 方法:在被选元素之后插入内容. 4,before() 方法:在被选元素之前插入内容.注意:append/prepend 是在选择元素内部嵌入:after/before 是在元素外面追加. 二.jQuery删除元素或内容:1,remove()方法:删除被选元素及其所有子元素. remov

SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-010-Introduction为类增加新方法

一. 1.Introduction的作用是给类动态的增加方法 When Spring discovers a bean annotated with @Aspect , it will automatically create a proxy that delegates calls to either the proxied bean or to the introduction implementation, depending on whether the method called be

centos为用户增加ssh key

linux增加用户,为用户增加key 可以用  ssh-keygen -t rsa 添加ssh的key,会得到public_key和自己的private_key 然后这个key可以用在任何用户上 adduser wenbin cd /home/wenbin mkdir .ssh echo public_key >> /home/wenbin/.ssh/authorized_keys chown wenbin.wenbin /home/wenbin/.ssh -R 权限很重要! .ssh权限为7

git 生成ssh key gitlab 增加 ssh key

1.在用户目录下生成 ssh key $ cd ~/.ssh 查看密钥 $ ls config (配置git 地址端口) { host:   port: } id_dsa (密钥)  id_dsa.pub (公钥) $ ssh-keygen 生成密钥 2.将密钥保存到gitlab 在github上点击"setting", 找到添加SSH key的菜单,然后新增SSH key: 把文件id_rsa.pub  里面的内容全部复制到 key编辑框中, 保存完毕:

iOS 类增加成员变量

RT // 增加成员变量 #import <Foundation/Foundation.h> @interface NSObject (AddProperty) @property (nonatomic,strong) NSString *stringProperty; @property (nonatomic,assign) NSInteger integerProperty; @end #import "NSObject+AddProperty.h" #import &

SQL替换语句之批量修改、增加、删除字段内容

语法 REPLACE ( original-string, search-string, replace-string ) 用法 update 表的名称 set 替换字段=REPLACE(替换字段,原来内容,新内容) 参数 如果有某个参数为 NULL,此函数返回 NULL. original-string     被搜索的字符串.可为任意长度. search-string     要搜索并被 replace-string 替换的字符串.该字符串的长度不应超过 255 个字节.如果 search-