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 Server中的扩展事件学习系列
SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events SQL Server 扩展事件(Extented Event ...
- dp基础√
1.重叠子问题 2.能从小问题推到大问题 Dp: 设计状态+状态转移 状态: 1.状态表示: 是对当前子问题的解的局面集合的一种(充分的)描述.(尽量简洁qwq) ◦ 对于状态的表示 ...
- 概率与期望dp相关
概率与期望dp 概率 某个事件A发生的可能性的大小,称之为事件A的概率,记作P(A). 假设某事的所有可能结果有n种,每种结果都是等概率,事件A涵盖其中的m种,那么P(A)=m/n. 例如投掷一枚骰子 ...
- Qfile
打开方式: void AddStudents::write_to_file(QString src){ QFile file("stu.txt"); if (!file.open( ...
- React 使用相对于根目录进行引用组件
在对自己开发的组件中经常会做诸如以下的引用: import genFetchEntryListArgs from '../../../utils/table/genFetchEntryListArgs ...
- OneinStack定时同步备份数据库/网站至七牛云存储方法
无论我们用WEB面板,还是用一键脚本安装环境建站,只要一旦我们开始用VPS.服务器,最为关键的就是服务器中的数据.因为大部分VPS.服务器商家都是无管理型主机,任何的安装和维护都需要我们自行管理.即便 ...
- 出去就餐并且理解Express.js的基本知识
Going out to eat and understanding the basics of Express.js出去就餐并且理解Express.js的基本知识 原文:Going out to e ...
- Spring Boot实现SAAS平台的基本思路
一.SAAS是什么 SaaS是Software-as-a-service(软件即服务)它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器 上,客户可以根据自己实际需求,通 ...
- MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码
先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroad_lee/MongoDBDemo.rar 此项目是用Maven创建的,没有使用Mave ...
- linux Apache 的安装
rpm –qa httpd 查询是否安装了 Apache rpm –e 包名卸载安装程序 rpm –e --nodeps 包名卸载安装程序不产生依赖 #检查是否安装有依赖库 yum install – ...