hashcode、equals、HashMap间的关系
1、从Object说起
package com.hallo.collection;
public class ObjectDemo {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
//同一Object对象,hashCode永远相同
assert(o1.hashCode() == o1.hashCode());
//不同Object对象,hashCode永远不相同
assert(o1.hashCode() != o2.hashCode());
//不同对象equals返回false
assert(!o1.equals(o2));
System.out.println("end");
}
}
输出:end
2、String类Demo
package com.hallo.collection;
public class StringDemo {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
//不同string对象(==不成立)保存相同字符串时,hashCode和equals返回相同
assert(str1.hashCode() == str2.hashCode());
assert(str1.equals(str2));
assert(str2.hashCode() == str3.hashCode());
assert(str2.equals(str3));
System.out.println("end");
}
}
输出:end
3、自定义类,重写hashcode、equals方法
package com.hallo.collection;
import java.util.HashMap;
import java.util.Map;
public class MyObject {
private String name;
public String getName() {
return name;
}
public MyObject(String name) {
this.name = name;
}
@Override
public int hashCode() {
//使用object类的方法
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj instanceof MyObject) {
return ((MyObject) obj).getName(http://www.amjmh.com).equals(this.getName());
}
return false;
}
public static void main(String[] args) {
MyObject o1 = new MyObject("k1");
MyObject o2 = new MyObject("k1");
MyObject o3 = new MyObject("k3");
Map<MyObject, String> myObjectMap = new HashMap<MyObject, String>();
myObjectMap.put(o1, "o1");
myObjectMap.put(o1, "o11");
myObjectMap.put(o2, "o2");
myObjectMap.put(o3, "o3");
System.out.println(myObjectMap);
}
}
输出:
{com.hallo.collection.MyObject@7852e922=o11,
com.hallo.collection.MyObject@70dea4e=o3,
com.hallo.collection.MyObject@4e25154f=o2}
---------------------
hashcode、equals、HashMap间的关系的更多相关文章
- JAVA基础4——谈谈HashCode与HashMap相关概念
谈谈HashCode与HashMap HashCode hashCode,即一个Object的散列码. HashCode的作用: 对于List.数组等集合而言,HashCode用途不大: 对于Hash ...
- (考研)散列表和hashcode和hashmap
package tt; import java.util.HashMap; import java.util.Map; public class a0 { public static void mai ...
- [ 转载 ]hashCode及HashMap中的hash()函数
hashCode及HashMap中的hash()函数 一.hashcode是什么 要理解hashcode首先要理解hash表这个概念 1. 哈希表 hash表也称散列表(Hash table),是 ...
- 小例子(二)、winform窗体间的关系
写一个关于winform窗体间的关系 1.登陆,思路:登陆后隐藏登陆窗体,关闭Form2时结束整个应用程序. //登陆窗体 private void button2_Click(object send ...
- Linux权限与命令间的关系
极重要!权限与命令间的关系: 我们知道权限对於使用者帐号来说是非常重要的,因为他可以限制使用者能不能读取/创建/删除/修改文件或目录! 在这一章我们介绍了很多文件系统的管理命令,第六章则介绍了很多文件 ...
- 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19624.html 在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,w ...
- UML类图与类间六种关系表示
UML类图与类间六种关系表示 1.类与类图 类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性,操作,关系的对象集合的总称. 类图是使用频率最高的UML图之一. 类图用于描述系统中所包含的 ...
- pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者间的关系
pg_hba.conf.pool_hba.conf 以及 pool_passwd 三者间的关系: 1.pg_hba.conf.pool_hba.conf 以及 pool_passwd 三者关系 pg_ ...
- 海思HI35XX之----视频处理单元各通道间的关系
最近在折腾HI3518C的芯片,应用到IPCamera上,最终获取多路不同分辨率的视频流供不同需求的预览切换.此处简单记录一下视频前处理元VPSS(Video Process Sub-System)的 ...
随机推荐
- SQL查询结果列拼接成逗号分隔的字符串:group_concat
转自:SQL查询结果列拼接成逗号分隔的字符串 背景:做SQL查询时会经常需要,把查询的结果拼接成一个字符串. 解决方法: 通过 group_concat 函数 拼接的结果很长,导致拼接结果显示不全,可 ...
- 取石子游戏 HDU 1527 博弈论 威佐夫博弈
取石子游戏 HDU 1527 博弈论 威佐夫博弈 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两 ...
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- 数学: HDU1005 Number Sequence
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Redis : 为什么我们做分布式使用 Redis ?(转)
绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知.这里对 Redis 常见问题做一个总结,解决 ...
- oracle PL/SQL编程基础知识
在oracle中使用pl/sql来扩展SQL的功能,使得SQL能够更加的灵活,功能更加强大,效率更高.pl/sql让sql也能执行判断,循环等操作.主要记录一下pl/sql的基本语法和基本条件判断语句 ...
- TensorFlow机器学习实战指南之第二章2
TensorFlow实现反向传播 本节先举个简单的回归算法的例子.这里先举一个简单的例子,从均值1,标准差为0.1的正态分布中随机抽样100个数,然后乘以变量A,损失函数L2正则函数,也就是实现函数X ...
- Linux之vim按键
1. 移动光标的方法 h或左箭头 光标向左移动一个字符 j或下箭头 光标向下移动一个字符 k或上箭头 光标向上移动一个字符 l或右箭头 光标向右移动一个字符 如果想要向下移动30行,可以使用“30j” ...
- string遍历
#include <iostream>#include <string> using namespace std;int main(int argc, const char * ...
- Spring缓存机制(转)
Spring的缓存机制非常灵活,可以对容器中任意Bean或者Bean的方法进行缓存,因此这种缓存机制可以在JavaEE应用的任何层次上进行缓存. Spring缓存底层也是需要借助其他缓存工具来实现,例 ...