Java map 存取对象
来源:互联网 发布:相册制作软件下载 编辑:程序博客网 时间:2024/05/20 02:28
今天刚好做一个了相关功能
import java.util.HashMap;import java.util.Map;public class TestKey{public static void main(String[] args){Key k1 = new Key(1, 1);Map<Key, Integer> map = new HashMap<Key, Integer>();map.put(k1, 12);Key k2 = new Key(1, 1);System.out.println(map.containsKey(k2));System.out.println(k1==k2);}}class Key{private int i;private int j;public Key(int i, int j){this.i = i;this.j = j;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + i;result = prime * result + j;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Key other = (Key) obj;if (i != other.i)return false;if (j != other.j)return false;return true;}@Overridepublic String toString() {return "Key [i=" + i + ", j=" + j + "]";}}
true
false
一开始以为只要重写了hashCode跟equals方法后,
k1 k2两个对象是相等的,后来发现不是,
因为k1 k2都是引用,表示的是在内存堆(heap)中的一个地址,所以 k1 == k2 输出的是false
map中的get(Object key) 跟 containsKey(Object key) 的实现都是比较对象的hashCode()跟equals()来判断是否是同一个对象,而不是直接比较对象地址
而Key类里面重写了 hashCode() 跟 equals() 方法,所以实际上containsKey(k2)会返回 true
同理,get(key)也是一样
0 0
- Java map 存取对象
- java 中的Map存取对象
- redis Jedis存取list对象和map
- JAVA存取PostgreSQL大对象类型oid
- java对象数组的文件存取
- java操作redis(二):存取对象操作
- JAVA存取ORACLE中的BLOB对象
- java 对象转map,map转对象
- java中在map中存取值操作
- Java 遍历 Map 对象
- Java 遍历 Map 对象
- Java遍历Map对象
- java map转对象
- java 对象转map
- java对象转换map
- java对象转map
- 序列化存取实现java对象深度克隆
- Java对象数据存取的3种方式
- 在PB中动态修改数据窗口DW的SQL语句方法注意事项
- 100道动态规划——4 UVA 1331 Maximum Triangulation DP 计算几何
- 不安全的直接对象引用
- java二叉树非递归之中序遍历
- Linux下如何查找一个函数在哪个库中
- Java map 存取对象
- Android快速打造超简单CircleImageView
- [iOS]仿微博视频边下边播之封装播放器
- JSP表单的发送
- 基于Visual Studio AddIns(插件)的形式开发的C#及JS的代码注释工具
- 命名空间
- 《大话设计模式》-- 第24个 职责链模式
- Java之同步代码块实现取钱实例
- 对于sqldependency类的使用(通过它来监听数据库的变化)