那天无意间看到一个博客,写到关于Map 元素覆盖的问题,特意做了一个例子验证了一下:
package com.javaeye.demo; public class Apple { private String name; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Apple other = (Apple) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
定义了一个Apple类,重写了hashCode 和 equals 方法,name相同的话2个对象就相等。
接下来是测试类:
package com.javaeye.demo; import java.util.HashMap; import java.util.Map; public class AppleMain { public static void main(String[] args) { Apple apple1 = new Apple(); apple1.setName("APPLE"); apple1.setAddress("Beijing"); Apple apple2 = new Apple(); apple2.setName("APPLE"); apple2.setAddress("Shanghai"); Map<Apple, String> map = new HashMap<Apple, String>(); map.put(apple1, "A"); map.put(apple2, "B"); for(Map.Entry<Apple, String> entry:map.entrySet()) { System.out.println(entry.getKey().getAddress() + "-" + entry.getValue()); } } }
猜猜答案:
1) Beijing-A
2) Beijing-B
3) Shanghai-A
4) Shanghai-B
我相信大部分的人会选择4)把,其实正确答案是2)。 Map 覆盖的时候KEY是不会被覆盖的,只会覆盖VALUE的值。
值得注意。
相关推荐
var mapDiv = map.getContainer(); // Create div for both buttons var buttonContainerDiv = document.createElement("div"); DragZoomUtil.style([buttonContainerDiv], {cursor: 'pointer', zIndex: 150...
8.1问题跟踪 72 8.2成为参与 73 8.3更多信息 73 第二部分 架构与实现 73 9.技术概述 73 9.1运行环境 73 9.2核心组件 74 9.2.1 SecurityContextHolder,SecurityContext和认证对象 74 获取有关当前用户的信息 75 ...
关于举办2009’CHINA3S’3S技术一体化应用研讨会暨遥感与GIS制图、Google Earth与Google Map等虚拟三维仿真建模与共享软件应用开发及ARCGIS与遥感分析操作应用高级程序员学习班的最新通知 (2009.6.19—30) Google...
ACM/ICPC 竞赛之 STL--MAP 40 ACM/ICPC 竞赛之 STL--ALGORITHM 40 STL IN ACM 41 头文件 42 线段树 43 求矩形并的面积(线段树+离散化+扫描线) 43 求矩形并的周长(线段树+离散化+扫描线) 44
11.3.8 访问控制符带来的覆盖问题 306 11.3.9 final:不允许方法被覆盖 310 11.3.10 重温静态方法 311 11.3.11 静态方法——类范围里的概念 312 11.3.12 静态方法何以为“静态” 314 11.4 变量的修饰符 316 ...
11.3.8 访问控制符带来的覆盖问题 306 11.3.9 final:不允许方法被覆盖 310 11.3.10 重温静态方法 311 11.3.11 静态方法——类范围里的概念 312 11.3.12 静态方法何以为“静态” 314 11.4 变量的修饰符 316 ...
但是 HashMap 原有的问题也都存在,比如在并发场景下使用时容易出现死循环。 final HashMap, String> map = new HashMap, String>(); for (int i = 0; i ; i++) { new Thread(new Runnable() { @Override public...
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...
ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,...
2. 方法的覆盖 18 (六).接口 20 1. 定义接口 20 2. 实现接口 21 3. 内部类 23 (七).集合 30 1.Map集合 30 2. ArrayList集合 32 3. LinkedList集合 33 (八).异常处理 34 1. 异常类的产生、捕获与处理 34 2. 抛...
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...
一开始的需求只是表头部分在...2,如果是area元素,会返回最接近的map元素; 3,返回至少符合以下一个条件的最接近该节点的元素:1,元素的position不是static;2,是body元素;3,源元素的position是static,祖先元素...
数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? 要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的...
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...
掌握package(又称默认,友元)控制符,系统掌握4种访问控制符 第6章 面向对象(多态) 4课时 理解多态的概念,不关心具体细节,以抽象一般的思维方式考虑问题(同一接口,不同实现)。...
学生提问:我是否可以让图4.13中灰色覆盖的数组元素再次指向另一个数组?这样不可以扩展成三维数组吗?甚至扩展到更多维的数组? 101 4.6.5 操作数组的工具类 102 4.6.6 数组的应用举例 103 4.7 本章小结 106 本...
-区域概览表-地图上的移动和大小标记,门牌号,地图标签-在地图上显示位置状态-优化了精细缩放-修复了一些错误-在设置区域边界以更好地覆盖邻居边界时,不透明节点-概览图不会旋转2.01版中的新功能:-小错误修正-...
list、set、map问题? 答:set 不允许重复,无序 list 允许重复,有序 map 成对的数据结构,键值必须具有唯一性 Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许...
i++){ //运行老久,减少循环次数会快很多,只是精确度小些 pi += (fenZi/fenMu) ; fenZi *= -1.0; //每项分子的变化是+4,-4,+4,-4 .... fenMu += 2.0; //分母的变化是1,3,5,7, .... 每项递加2 } ...