`
yznxing
  • 浏览: 370007 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【新手记录】Map中存放Object类型使用小记

    博客分类:
  • java
阅读更多

之前在使用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的操作都用字符串,一直没注意这个问题,很简单的一个问题,这里记录下。不过找到问题了我还还是很开心的,虽然耗费了一些时间。。。


            ^_^


 

0
0
分享到:
评论
9 楼 RednaxelaFX 2010-05-04  
night_stalker 写道
这里新东西很多啊,譬如各种轮子 ……

那是你运气好至少能从scratch开始各种山寨东西……现在觉得前段时间山寨东西的时候就算再折磨也比在老系统上改造要舒服多了 T T
8 楼 yznxing 2010-05-04  
RednaxelaFX 写道
night_stalker 写道
以前的东西不要碰可以理解,但做新东西的时候不用好工具就纯属偏见了。

感觉、习惯、经验 都是会欺骗人的。

你不觉得这部很少有机会能做“新”东西么……很多时候新需求也是在旧系统上改出来了,那就是个茶几啊 =_=|||



“新”东西,哎,我们现在就是在茶几上摆“杯具”,而且本身“杯具”就算了,
还担心会把以前放上去的“杯具”碰到,到时候直接就成 惨剧了。。。
7 楼 night_stalker 2010-05-04  
这里新东西很多啊,譬如各种轮子 ……
6 楼 RednaxelaFX 2010-05-04  
night_stalker 写道
以前的东西不要碰可以理解,但做新东西的时候不用好工具就纯属偏见了。

感觉、习惯、经验 都是会欺骗人的。

你不觉得这部很少有机会能做“新”东西么……很多时候新需求也是在旧系统上改出来了,那就是个茶几啊 =_=|||
5 楼 night_stalker 2010-05-04  
以前的东西不要碰可以理解,但做新东西的时候不用好工具就纯属偏见了。

感觉、习惯、经验 都是会欺骗人的。
4 楼 yznxing 2010-05-04  
RednaxelaFX 写道
其实真是奇怪……明明装一个东西就可以为自己省去很多麻烦让自己能更懒,咋这“惰性”不是倾向于让自己更舒服而是倾向于虐待自己呢……


因为习惯和“以前就是这样的,动就会出问题”,“经验”
这些东西,是很大的压力和阻力的。

当初从antx换到maven中间是有很多技术人员的努力和坚持推广的。。。
不然现在还是antx的天下。。。
3 楼 RednaxelaFX 2010-05-04  
其实真是奇怪……明明装一个东西就可以为自己省去很多麻烦让自己能更懒,咋这“惰性”不是倾向于让自己更舒服而是倾向于虐待自己呢……
2 楼 yznxing 2010-05-04  
lombok 这个东东,感觉还是侵入性有点大。。
额,需要给eclipse装个东东。

我当时用的时候还不知道,不好推吧估计。
再说现在大家貌似都比较惰性了。。。
推新阻力有点大,只能小范围搞搞,然后再推广!
1 楼 RednaxelaFX 2010-05-02  
呃嗯……所以我已经习惯了在写这种类的时候让Eclipse帮我生成出equals()和hashCode()
在用Lombok以前 =_=|||
可惜服务这边加Lombok的依赖貌似不太方便,所以没有推这玩儿……

相关推荐

    基于MapObject的GIS程序

    7. **用户界面集成**:将MapObject集成到自定义用户界面中,需要熟练使用事件处理和控件布局,以创建符合用户需求的GIS应用界面。 8. **性能优化**:在处理大量数据时,理解如何优化地图渲染速度和查询性能至关重要...

    用C# MapObject编写的一个GIS程序

    在本文中,我们将深入探讨如何使用C#编程语言与Esri的MapObject库结合,来构建一个GIS(地理信息系统)程序。MapObject是Esri公司提供的一个强大的地图开发组件,它允许开发者创建交互式地图应用,支持多种地理数据...

    MapObject中文学习教程

    9. **事件处理**:了解MapObject中的各种事件,如鼠标点击事件、地图更新事件等,以及如何编写事件处理代码。 10. **实例与实践**:教程通常会包含一些实战例子,比如创建一个简单的地图查看器或进行特定的GIS任务...

    Map 转为Object Object 转为 Map java jdk1.4以上

    本文将详细介绍如何使用Java反射来实现Map到Object以及Object到Map的转换。 首先,让我们理解Map和Object的基本概念。Map接口是Java集合框架的一部分,它存储键值对,允许我们通过键来查找对应的值。而Object是所有...

    Mapobject开发例子

    通过阅读这份指南,开发者可以深入理解MapObject的功能特性,学会如何在VB环境中有效地使用MapObject开发出具有地图功能的应用程序。在实际项目中,结合GIS理论知识和编程实践经验,可以进一步提高MapObject应用的...

    MapObject中文学习指南

    MapObject(MO)是Esri公司开发的一种地理信息系统(GIS)组件,它允许开发者在应用程序中集成地图功能。MapObject接口使得开发人员可以利用地图数据、空间分析和地图操作等功能,为用户提供直观的地理信息展示。这...

    mapobject开发教程

    2. **控件引用**:在项目中引入MapObject控件,通常包括IMapControl和IPageLayoutControl,前者负责地图显示,后者处理布局设计。 3. **地图数据加载**:使用MapObject的IWorkspaceFactory接口打开数据源,通过...

    MapObject控件的使用.doc

    MapObject控件是由ESRI公司开发的一组组件式GIS(地理信息系统)开发工具,主要用于在常见的编程环境中如VB、VC、Delphi等构建具有地图功能的应用程序。MapObject,简称为MO,它提供了一种灵活的方式来创建用户定制...

    c#+MapObject实例

    在C#编程中,MapObject是一个关键的概念,特别是在地理信息系统(GIS)开发中。MapObject是由ESRI(Environmental Systems Research Institute)提供的一套用于构建地图应用程序的组件。它允许开发者在Windows应用...

    MapObject2.3 的 vc代码 common 文件

    开发者在使用MapObject 2.3时,需要理解并熟练运用这些"common"文件中的代码,以便更好地集成和扩展GIS功能。通过深入研究这个部分的源码,不仅可以提高对MapObject工作原理的理解,还能为自定义功能和性能优化提供...

    mapobject二次开发

    MapObject二次开发主要涉及到GIS(地理信息系统)领域的技术应用,MapObject是一款由MapInfo公司开发的桌面GIS组件,它提供了地图显示、数据编辑、空间分析等功能,广泛应用于地图制图、地理信息系统集成以及各种...

    mapobject教程

    在VB中使用MapObject,开发者需要了解如何创建MapObject对象、设置地图属性(如投影、比例尺)、添加图层、控制图层可见性,以及响应用户的交互事件,如鼠标点击或滚动。此外,还要学习如何进行数据查询和空间操作,...

    MapToObjectUtil.java(Map转Object对象)

    Java代码Map转Object对象

    mapobject

    mapobject使用手册

    mapobject测试

    在本例中,`winGis.sln`很可能是用C#或Visual Basic .NET等.NET语言编写的GIS应用程序项目,使用MapObject组件来实现地图功能。 4. **项目结构**:解决方案文件`.sln`会包含具体的项目设置、引用库以及项目间的依赖...

    visual-mo.rar_esri mapobject_mapobject

    在Visual Basic(VB)中使用MapObject,开发者可以充分利用VB的易用性和灵活性,快速构建GIS应用。首先,我们需要了解MapObject的基本结构,包括Map、Layer、Feature等核心对象。Map对象代表了地图的整体,包含了多...

    VB GIS MapObject手册(开发指南)

    《VB GIS MapObject开发指南》是一本专注于GIS(地理信息系统)中MapObject组件的详细教程,专为使用Visual Basic(VB)进行开发的程序员设计。MapObject是Esri公司提供的一种强大的地图显示和地理处理工具,它允许...

    MapObject开发

    在小内存空间中,你能用多种工业标准程序环境之一去建立应用程序,你能够联合使用MapObject与其它软件去实现地图与用户信息的联系。 MapObject的优点包括: 1. 解决了大软件的恶性循环问题。MapObject提供了一种...

    Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并

    Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并 Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并

Global site tag (gtag.js) - Google Analytics