hashCode方法和equals方法比较
为什么用HashCode比较比用equals方法比较要快呢?我们要想比较hashCode与equals的性能,得先了解HashCode是什么。
HashCode
HashCode是jdk根据对象的地址或字符串或者数字利用hash算法计算出的int类型的数值。
Java采用了哈希表的原理,将数据依照特定算法直接指定到一个地址上,这样可以简单的理解为hashCode方法返回的就是对象存储位置的映像。
因此HashCode能够快速的定位对象所在的地址,并且根据Hash常规协定,如果两个对象相等,则他们一定有相同的HashCode。
equals
equals方法对比两个对象实例是否相等时,对比的就是对象示例的ID(内存地址)是否是同一个对象实例;该方法是利用的等号(==)的判断结果。
所以HashCode的效率远远大于equals.
但是HashCode并不保证唯一性,因此当对象的HashCode相同时,再利用equals方法来判断两个对象是否相同,就大大加快了对比的速度。
总结
等号(==):对比对象实例的内存地址来判断是否是同一对象实例;也可以说是判断对象实例是否物理相等。
equals():当对象没有重写Object的equals方法时,equals方法判断的是对象实例的ID,也就是内存地址,是否是同一对象实例;该方法就是使用等号(==)的判断结果。Object类的源码如下:
public boolean equals(Object obj) {
return (this == obj);
}
当对象所属的类重写equals方法时,要根据自身逻辑来判断是否相等。
hashCode():根据对象的地址或字符串或者数字等计算出对象实例的哈希码。可以简单的说,hashCode比较的是对象的内存地址。
hashCode方法和equals方法比较的更多相关文章
- 为什么要重写hashCode()方法和equals()方法及如何重写
我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...
- java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重
package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...
- hashCode()方法和equals方法的重要性。
在Object中有两个重要的方法:hashCode()和equals(Object obj)方法,并且当你按ctrl+alt+s时会有Generator hashCode()和equals().我们不 ...
- 为什么要重写hashcode方法和equals方法
我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...
- Java 重写hashCode 方法和equals方法
package Container; import java.util.HashSet; import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致) ...
- 集合hashCode()方法和equals()办法
1.哈希码: Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码. 2.利用哈希码向集合中插入数据的顺序? ...
- hashCode()方法和equal()方法的区别
本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...
- java数组、java.lang.String、java.util.Arrays、java.lang.Object的toString()方法和equals()方法详解
public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ...
- Object、String、数组的 toString() 方法和 equals() 方法及java.util.Arrays
public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ...
随机推荐
- SQL Server Service Broker创建单个数据库会话
概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...
- Android WebView默认GONE出现的问题记录
前段时间重构一批相似度80%以上的项目[真搞不懂前人们是怎么忍受十几个类似的应用一直CVU的,冗余代码和资源达到40%以上] 其中需要抽出一个公共的带WebView的Activity基类,由于脑残测试 ...
- Unity3d 协程
参考文章: http://blog.csdn.net/onafioo/article/details/48979939 http://www.cnblogs.com/zhaoqingqing/p/37 ...
- Java 与C++的各种优势与弱点--学习更新中
时隔两年没有怎么碰Java了,最近开始学习回顾下.在这里记录下学习的点滴,持续更新...希望对c++\java等不同语言有较为清晰的认识,至少不要学完以后,哪一个都不会了... Java 优势: 1. ...
- 5.For loops
for 循环语句 在需要重复执行代码的时候,for循环常常被用到.我们可以让一行代码执行10次: for i in range(1,11): print(i) 最后一个数字11是不包含在内 ...
- Java架构师学习路线
Java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池-- Java ...
- WPF 依赖属性源码 洞察微软如何实现DependencyProperty
依赖属性DependencyProperty是wpf最重要的一个类,理解该类如何实现对学习wpf帮助很大! 终于找到了该类的源码!仔细阅读源码,看看微软如何玩的花招! File: Base\Syste ...
- Django普通文件上传
前端代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- sql针对某一字段去重,并且保留其他字段
今天客户提了一个小需求,希望我能提供一条sql语句,帮助他对数据中 _field 这个字段的值去重,并且保留其他字段的数据.第一反应是select distinct,但这种语句在对某个字段去重时,无法 ...
- CTF---Web入门第二题 上传绕过
上传绕过分值:10 来源: Justatest 难度:易 参与人数:5847人 Get Flag:2272人 答题人数:2345人 解题通过率:97% bypass the upload 格式:fla ...