在HashMap中,如果需要使用多个属性组合作为key,可以将这几个属性组合成一个对象作为key。但是存在的问题是,要做get时,往往没办法保存当初put操作时的key object的reference,此时,需要让key object覆盖如下hashCode()和equals(Object obj)的实现。sample code如下:

public class TestKeyObject {
private long id;
private int type; public TestKeyObject(long id, int type) {
this.id = id;
this.type = type;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public int getType() {
return type;
} public void setType(int type) {
this.type = type;
} //定义HashCode的计算方式
public int hashCode() {
int ret = new Long(id).hashCode() ^ new Integer(type).hashCode();
// 也可以用下面这种方式计算hashCode
// int ret = String.valueOf(id).hashCode() ^
// String.valueOf(type).hashCode();
System.out.println(ret);
return ret;
} //定义相等的条件
public boolean equals(Object obj) {
if (null == obj) {
return false;
}
if (!(obj instanceof TestKeyObject)) {
return false;
}
TestKeyObject tmpObj = (TestKeyObject) obj;
return tmpObj.id == id && tmpObj.type == type;
} }

Java学习笔记--HashMap中使用object做key的问题【转】的更多相关文章

  1. java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  2. JAVA学习笔记--方法中的参数调用是引用调用or值调用

    文献来源:<JAVA核心技术卷Ⅰ>,第4章第5节 (没有相关书籍的可看传送门) ps:测试demo因为偷懒,用的是String对象 结论:Java使用的是对象的值引用.即将任何对象所在内存 ...

  3. Java学习笔记-----eclipse中建立Java项目并成功运行

    环境:WIN7 64位 +eclipse 2018 12version 具体方法:https://jingyan.baidu.com/album/9c69d48fefa53113c9024eb3.ht ...

  4. Java学习笔记——动态代理

    所谓动态,也就是说这个东西是可变的,或者说不是一生下来就有的.提到动态就不得不说静态,静态代理,个人觉得是指一个代理在程序中是事先写好的,不能变的,就像上一篇"Java学习笔记——RMI&q ...

  5. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  6. 0014 Java学习笔记-集合-HashMap集合

    主要的方法 + 构造方法: * HashMap(); - 默认大小16,负载因子0.75 * HashMap(int initialCapacity); * HashMap(int initialCa ...

  7. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  8. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  9. java学习笔记10--泛型总结

    java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5-- ...

随机推荐

  1. dos命令弹出对话框---Msg命令详解

    标签: dos批处理对话框 2015-11-12 17:20 497人阅读 评论(0) 收藏 举报 脚本(30)  版权声明:本文为博主原创文章,未经博主允许不得转载. dos命令弹出对话框---Ms ...

  2. rm: cannot remove `/home/cn0000/log/formlog.20140417': Read-only file system

    [root@localhost home]# su - cn0000 rm: cannot remove `/home/cn0000/log/monitor_xmllog.20140417': Rea ...

  3. Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组合

    买来<Go Web编程>一书学习Go语言,结果按照书中的步骤搭建,发现部分站点已经失效了,查了网上好多教程也没有人能够说清楚如何搭建.还是自己动手找方法吧,经过自己的不懈努力终于搭建好了. ...

  4. 2013第39周一Web打印

    2013第39周一Web打印 项目中遇到了Java Web打印问题,简单调用IE浏览器的打印不能完全满足要求,于是就搜集了Web打印相关的主题,简单汇总一下.web打印难点在分页.页面纸张设置,页眉页 ...

  5. 我为什么放弃了win7系统

    作为一个软件开发者,由于要常年维护一些老系统,所以非常看中win7对一些稍老一点软件的兼容性,可它还是让我失望了: 如果没有特殊手段,sqlserver2000是不能向导式安装成功的: 之前公司的主要 ...

  6. [Qt] IP地址输入框实现

    封装了一个ip地址的输入框.网络上下载了份代码,找不到哪里的了.经过修改之后,尽力让它的行为和windows的IP地址输入框的行为看起来像些.代码如下: //ipaddredit.h #ifndef ...

  7. js中的循环语句

    js中的循环语句可分为三种:1.while:2.do……while:3.for. while的语法为 while (exp) {    //statements;} var a=1,b=0; whil ...

  8. Java正則表達式语法

    Java正則表達式语法 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.比如,"n"匹配字符"n"."\n"匹配换行 ...

  9. 屏幕分辨率(QQVGA、QVGA、VGA、XGA、WXGA、WUXGA和WSXGA+)

    TFT屏幕 TFT ( Thin Film Transistor 薄膜晶体管) ,是有源矩阵类型液晶显示器(AM-LCD)中的一种,TFT在液晶的背部设置特殊光管,能够“主动的”对屏幕上的各个独立的象 ...

  10. jQuery的简单应用

     时隔多日, 终于我又有时间来浏览些新知识了, 并不是偷懒什么的, 只是真的好忙, 看似闲暇的时间总是冒出一些模糊而又不得不做的事情, 今日终于我又有时间了, 可以看下jQuery了, 并根据自己的了 ...