测试用例:

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;
}
}

  

java中map插入相同的key的更多相关文章

  1. Java中Map根据键值(key)或者值(value)进行排序实现

    我们都知道,java中的Map结构是key->value键值对存储的,而且根据Map的特性,同一个Map中 不存在两个Key相同的元素,而value不存在这个限制.换句话说,在同一个Map中Ke ...

  2. java中Map,List与Set的差别

    java中Map,List与Set的差别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,而且同一个数组 ...

  3. java中map接口hashMap以及Enty之间的用法和关系

    java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...

  4. Java中Map用法详解

    原文地址http://blog.csdn.net/guomutian911/article/details/45771621 原文地址http://blog.csdn.net/sunny2437885 ...

  5. 将java中Map对象转为有相同属性的类对象(json作为中间转换)

    java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...

  6. Java中Map<Key, Value>存储结构根据值排序(sort by values)

    需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...

  7. java中Map,List与Set的区别(转)

    Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类 ...

  8. java中Map,List与Set的区别

    Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类 ...

  9. Java中Map的使用

    Map以按键/数值对的形式存储数据,和数组很类似,在数组中存在的索引,它们本身也是对象.       Map的接口       Map---实现Map       Map.Entry--Map的内部类 ...

随机推荐

  1. 在CentOS上搭建svn服务器及注意事项

    系统环境 CentOS 5.9 推荐使用yum install安装,比较简单   一.检查是否已经安装其他版本svn # rpm -qa subversion #卸载svn # yum remove ...

  2. Security Configuration and Auditing Scripts for Oracle E-Business Suite (文档 ID 2069190.1)

    This document provides the security configuration and auditing scripts for Oracle E-Business Suite. ...

  3. 扫描二维码判断移动设备(Android/ios),以及判断是否微信端扫描

    <section class="download"> <a href="apk地址" class="android" st ...

  4. Worse Is Better

    最近做的几件事和最近刚读到这篇文章(http://www.jwz.org/doc/worse-is-better.html)让我重新认识了KISS和这个所谓的Worse-is-better原则. 软件 ...

  5. 使用IronPython给.Net程序加点料

    开发的时候,经常被策划频繁变动的方案而苦恼.这时候就想要加入点动态语言来辅助一下. 在考虑用动态语言之前也曾想过使用动态加载dll的方式,实现基础接口来调用.在卸载的时候遇到了问题,虽可以通过应用程序 ...

  6. SQL语言分类

    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...

  7. kernel 内核安装

    1.kernel 下载 https://cdn.kernel.org/pub/linux/kernel/ 2.解压源码 tar -zxvf linux-*.tar.gz 3.进入目录 cd linux ...

  8. MQTT V3.1--我的理解

    最近因为工作需要,需要对推送消息了解,因此对MQTT进行了整理,这里更多的是对MQTT英文版的翻译和理解. MQTT(Message Queue Telemetry Transport),遥测传输协议 ...

  9. Java中测试异常的多种方式

    使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  10. .net版本发展历史

    最近装上了VS2013,发现好多新特性.新功能,公司办公还在使用VS2005.VS2008,不过用着也很顺手,在最新版Visual Studio中,微软加入了git源码管理工具,和之前的TFS大体上类 ...