之前在使用google Collections的MapMaker的时候,比较正式的写的时候,map中存放的Key是我自己写一个CacheKey的Object,但是在存放过后,再通过cache的get却总是找不到缓存记录,心里纳闷了很久为啥。
无奈之下,debug进去了get的源码,发现了。。。
这里就放HashMap的get代码,其它类型的map都差不多类似:
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
hash(key.hashCode());
这里会调用key的hash方法。
key.equals(k),这里就会调用key的equals方法了。
心里恍然大悟,我需要对我这个CacheKey的object重载下hash方法和equals方法,这样才会认为两个CacheKey是同一个。
于是改了相关代码,以下是相关的测试代码。
public class TestKey {
private String keyValue;
public String getKeyValue() {
return keyValue;
}
public void setKeyValue(String keyValue) {
this.keyValue = keyValue;
}
public TestKey(String keyValue) {
this.keyValue = keyValue;
}
/**
* 只有重载了hashCode和equals方法,
* 才能使得map中get会有预期的行为!
*/
public int hashCode() {
return this.keyValue.hashCode();
}
public boolean equals(Object o) {
TestKey testKeyTemp = (TestKey) o;
return testKeyTemp.getKeyValue().equals(this.keyValue);
}
}
public class TestHashMap {
/**
* @param args
*/
public static void main(String[] args) {
TestKey testKey = new TestKey("123");
TestKey testKey1 = new TestKey("123");
Map map = new HashMap();
map.put(testKey, "this is the value of testKey");
System.out.println(map.get(testKey1));
}
}
小结:以前一直对map的操作都用字符串,一直没注意这个问题,很简单的一个问题,这里记录下。不过找到问题了我还还是很开心的,虽然耗费了一些时间。。。
^_^
分享到:
相关推荐
7. **用户界面集成**:将MapObject集成到自定义用户界面中,需要熟练使用事件处理和控件布局,以创建符合用户需求的GIS应用界面。 8. **性能优化**:在处理大量数据时,理解如何优化地图渲染速度和查询性能至关重要...
在本文中,我们将深入探讨如何使用C#编程语言与Esri的MapObject库结合,来构建一个GIS(地理信息系统)程序。MapObject是Esri公司提供的一个强大的地图开发组件,它允许开发者创建交互式地图应用,支持多种地理数据...
9. **事件处理**:了解MapObject中的各种事件,如鼠标点击事件、地图更新事件等,以及如何编写事件处理代码。 10. **实例与实践**:教程通常会包含一些实战例子,比如创建一个简单的地图查看器或进行特定的GIS任务...
本文将详细介绍如何使用Java反射来实现Map到Object以及Object到Map的转换。 首先,让我们理解Map和Object的基本概念。Map接口是Java集合框架的一部分,它存储键值对,允许我们通过键来查找对应的值。而Object是所有...
通过阅读这份指南,开发者可以深入理解MapObject的功能特性,学会如何在VB环境中有效地使用MapObject开发出具有地图功能的应用程序。在实际项目中,结合GIS理论知识和编程实践经验,可以进一步提高MapObject应用的...
MapObject(MO)是Esri公司开发的一种地理信息系统(GIS)组件,它允许开发者在应用程序中集成地图功能。MapObject接口使得开发人员可以利用地图数据、空间分析和地图操作等功能,为用户提供直观的地理信息展示。这...
2. **控件引用**:在项目中引入MapObject控件,通常包括IMapControl和IPageLayoutControl,前者负责地图显示,后者处理布局设计。 3. **地图数据加载**:使用MapObject的IWorkspaceFactory接口打开数据源,通过...
MapObject控件是由ESRI公司开发的一组组件式GIS(地理信息系统)开发工具,主要用于在常见的编程环境中如VB、VC、Delphi等构建具有地图功能的应用程序。MapObject,简称为MO,它提供了一种灵活的方式来创建用户定制...
在C#编程中,MapObject是一个关键的概念,特别是在地理信息系统(GIS)开发中。MapObject是由ESRI(Environmental Systems Research Institute)提供的一套用于构建地图应用程序的组件。它允许开发者在Windows应用...
开发者在使用MapObject 2.3时,需要理解并熟练运用这些"common"文件中的代码,以便更好地集成和扩展GIS功能。通过深入研究这个部分的源码,不仅可以提高对MapObject工作原理的理解,还能为自定义功能和性能优化提供...
MapObject二次开发主要涉及到GIS(地理信息系统)领域的技术应用,MapObject是一款由MapInfo公司开发的桌面GIS组件,它提供了地图显示、数据编辑、空间分析等功能,广泛应用于地图制图、地理信息系统集成以及各种...
在VB中使用MapObject,开发者需要了解如何创建MapObject对象、设置地图属性(如投影、比例尺)、添加图层、控制图层可见性,以及响应用户的交互事件,如鼠标点击或滚动。此外,还要学习如何进行数据查询和空间操作,...
Java代码Map转Object对象
mapobject使用手册
在本例中,`winGis.sln`很可能是用C#或Visual Basic .NET等.NET语言编写的GIS应用程序项目,使用MapObject组件来实现地图功能。 4. **项目结构**:解决方案文件`.sln`会包含具体的项目设置、引用库以及项目间的依赖...
在Visual Basic(VB)中使用MapObject,开发者可以充分利用VB的易用性和灵活性,快速构建GIS应用。首先,我们需要了解MapObject的基本结构,包括Map、Layer、Feature等核心对象。Map对象代表了地图的整体,包含了多...
《VB GIS MapObject开发指南》是一本专注于GIS(地理信息系统)中MapObject组件的详细教程,专为使用Visual Basic(VB)进行开发的程序员设计。MapObject是Esri公司提供的一种强大的地图显示和地理处理工具,它允许...
在小内存空间中,你能用多种工业标准程序环境之一去建立应用程序,你能够联合使用MapObject与其它软件去实现地图与用户信息的联系。 MapObject的优点包括: 1. 解决了大软件的恶性循环问题。MapObject提供了一种...
Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并 Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并