Map的get()源码如下:
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode()); //返回key对应的hash值
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) { // 调用equals()逐个比较key集合中有无与形参相同的键值
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
当Map的key是自定义的对象类型时,要在自定义类中,重载Object类的两个方法,hashCode()和equals(),使得满足自己定义的“相同”的含义,这样才能用“相同”的key取到合适的value。
例子:
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString(){
return "["+x+" , "+y+"]";
}
public static void main(String[] args){
Map<Point,Integer> m=new Map<Point,Integer>();
m.put(new Point(1,2),3);
System.out.println(m.get(new Point(1,2));// result: null
}
}
以上代码的不足之处是没有重载hashCode和equals方法,纠正如下:
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString(){
return "["+x+" , "+y+"]";
}
public boolean equals(Object o){
System.out.println(">> in Point.equals()");
if(((Point)o).getX()==x && ((Point)o).getY()==y)
return true;
return false;
}
public int hashCode(){
System.out.println(">> in Point.hashCode()");
return x*10+y;
}
public static void main(String[] args){
Map<Point,Integer> m=new Map<Point,Integer>();
m.put(new Point(1,2),3);
System.out.println(m.get(new Point(1,2));// result: 3
}
}
分享到:
相关推荐
本系统是在Windows XP系统和MapGis6.7(B20051118)基础上,以Microsoft VC++ 6.0为编程语言,MapGis 6.7 SDK为开发平台进行开发的地质图件制作软件。系统基于MapGis输入编辑子系统强大的图形编辑能力,添加专业的地质...
如果已经有一个JassShopPro在运行中,再次双击注册为用JSP打开的类型的文件时,将在已启动的文档中打开文件。同样,支持拖放操作,可以直接将文件拖到窗口中打开 自动完成功能 输入“set ”,将自动显示本地变量与...
可以设为固定长度或定义首/尾标志,设置内存中实际起始地址,显示时和计算变量时用;由map文件自动读取内存变量(因条件所限,目前只支持由 ImageCraft C(ICC) 编译器产生的map文件,欢迎提供其他编译器的map文件...
2. 在制造地图时,↑↓←→ 控制地图视角,左键可以画点、更换点类型,右键可以删除点 3. 注意!制造地图时,绿色块是墙(就是游玩时候的树),树是开始点,end 是结束点! 为了制作方便我就这么设置了 QAQ 4. 制造...
具体的设置方法是在Info.plist文件中添加一个键Bundle display name,类型String,值填写你的应用的名字。 iOS9下百度地图不能联网 苹果在iOS9中默认情况下要去开发者必须全部使用HTTPS方式进行安全通信。但是事实是...
默认: true, dataType为"script"和"jsonp"时默认为false 如果设置为 false ,浏览器将不缓存此页面。 complete(jqXHR, textStatus)Function, Array 请求完成后回调函数 (请求成功或失败之后均调用)。这个回调...
jQuery.get( url, [data], [callback] )参数: url (String): 装入页面的URL地址 Map(可选): (可选)发送到服务端的键/值对参数 callback (Function): (可选) 当远程页面装入完成时执行的函数 ...
条款24:当关乎效率时应该在map::operator[]和map-insert之间仔细选择 条款25:熟悉非标准散列容器 迭代器 条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 条款27:用...
在删除选项中仔细选择 条款10:注意分配器的协定和约束 条款11:理解自定义分配器的正确用法 条款12:对STL容器线程安全性的期待现实一些 vector和string 条款13:尽量使用vector和string来代替动态...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较...
2,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用,培养解决实际问题的能力。 4,每一块知识点, 都有配套案例, 学习不再迷茫。 课程简介 第一章 环境搭建 00.导学 01.Scala简介 02.Scala程序和Java...
在表达式中使用算术运算符时要注意以下几点: 1,运算符两边的运算数字必须是数字 2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35 使用内建的int函数可...
如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart 创建和删除硬盘...
6.6.5 为各种设备配置自定义布局 6.7 使用Hierarchy Viewer调试和优化布局 6.8 参考资料 6.9 小结 第7章 使用菜单 7.1 Android菜单 7.1.1 创建菜单 7.1.2 使用菜单组 7.2 响应菜单项 7.3...
6.6.5 为各种设备配置自定义布局 6.7 使用Hierarchy Viewer调试和优化布局 6.8 参考资料 6.9 小结 第7章 使用菜单 7.1 Android菜单 7.1.1 创建菜单 7.1.2 使用菜单组 7.2 响应菜单项 7.3...
33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。 答:解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * ...
学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
在ArcCatalog下新建一个要素类(要素类型为:多边形),命名为:ClipPoly.shp 在ArcMap中,加载栅格数据:Landuse、和ClipPoly.shp 打开 编辑器工具栏,开始编辑ClipPoly ,根据要剪切的区域,绘制一个任意形状的多...