java中map插入相同的key

测试用例:

package test;

import org.junit.Test;
import po.Person;

import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;

/**
 * Created by Administrator on 2015/9/16.
 */
public class TestMap {
    /**
     * map插入相同key问题,value会不会覆盖
     */
    @Test
    public void testMap(){
        //HashMap中key的内容相同,则覆盖
        Map<String,Object> map1 = new HashMap<>();
        map1.put("张三",1);
        map1.put("张三",2);
        map1.put(new String("张三"),3);  //根据String特性,这三条内容相同,前两条地址相同
        map1.put("李四", 4);
        for (String s : map1.keySet()) {
            System.out.println(s+"======"+map1.get(s));
        }
        /** 结果
         *   张三======3
             李四======4
         */

        System.out.println("=====================================");
        //IdentityHashMap中key的内存地址必须完全相同才会覆盖
        Map<String,Object> map2 = new IdentityHashMap<>();
        map2.put("张三",1);
        map2.put("张三",2);
        map2.put(new String("张三"),3);//
        map2.put("李四", 4);
        for (String s : map2.keySet()) {
            System.out.println(s+"===="+map2.get(s));
        }
        /**
         * 李四====4
         张三====2
         张三====3
         */

        System.out.println("=====================================");

        Map<Person,Object> map3 = new IdentityHashMap<>();
        map3.put(new Person("张三", 11), 1);
        map3.put(new Person("张三", 11), 3);
        map3.put(new Person("李四", 11), 4);
        for (Person s : map3.keySet()) {
            System.out.println(s.toString()+"===="+map3.get(s));
        }
        /**
         * po.Person@165474cf====1
         po.Person@3ff2caf4====4
         po.Person@2c0cd7d====3
         */
        System.out.println("=====================================");
        Person person = new Person("张三", 11);
        Person person2 = new Person("张三", 11);
        System.out.println(person.equals(person2));

    }
}
package po;

/**
 * Created by Administrator on 2015/9/16.
 */
public class Person {
    int id;
    String name;
    int age;

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (id != person.id) return false;
        if (age != person.age) return false;
        return !(name != null ? !name.equals(person.name) : person.name != null);

    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        result = 31 * result + age;
        return result;
    }

    public Person(String name,int age){

        this.name=name;
        this.age=age;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老码农专栏

一些流行Java MVC框架的调用栈

1213
来自专栏码匠的流水账

聊聊HystrixThreadPool

hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java

791
来自专栏搞前端的李蚊子

Html5模拟通讯录人员排序(sen.js)

// JavaScript Document  var PY_Json_Str = ""; var PY_Str_1 = ""; var PY_Str_...

5976
来自专栏跟着阿笨一起玩NET

c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理

------解决方案-------------------------------------------------------- 开始的时候,禁用定时器,你...

2691
来自专栏增长技术

App Guide相关

##TourGuide https://github.com/worker8/TourGuide

702
来自专栏Golang语言社区

Knapsack problem algorithms for my real-life carry-on knapsack

I'm a nomad and live out of one carry-on bag. This means that the total weight o...

1142
来自专栏我和未来有约会

简练的视图模型 ViewModel

patterns & practices Developer Center 发布了 Unity Application Block 1.2 for Silver...

2199
来自专栏MelonTeam专栏

Bitmap 源码阅读笔记

导语: Android 系统上的图片的处理,跟Bitmap 这个类脱不了关系,我们有必要去深入阅读里面的源码,以便在工作中能更好的处理Bitmap相关的问题...

2518
来自专栏Pulsar-V

Save Camera Document

#pragma once #include "HCCamera.h" #include <time.h> #include <cstdio> #incl...

2828
来自专栏Petrichor的专栏

Dataset 列表:机器学习研究

In computer vision, face images have been used extensively to develop face recog...

1541

扫码关注云+社区