Java Objects工具类重点方法使用
Objects工具类
- jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法
 - 重点方法
- equals
- 用于字符串和包装对象的比较,先比较内存地址,再比较值
 
 - deepEquals
- 数组的比较,先比较内存地址,再比较值,如String、char、byte、int数组,或者包装类型Integer等数组
 
 - hashCode
- 返回对象的hashCode,若传入的为null,则返回0
 
 - hash
- 传入可变参数的所有值得hashCode的总和,底层用Arrays.hashCode
 
 - 可变参数
 
 - equals
 

重写HashCode和Equals
HashCode方法
顶级类Object里面的方法,所有类都是继承Object的,返回值int类型
根据一定的hash规则(存储地址,字段,或者长度等),映射成一个数值,即散列值
Equals方法
顶级类Object里面的方法,所有类都是继承Object的,返回值boolean类型
根据自定义的匹配规则,用于匹配两个对象是否一样,一般逻辑
//判断地址是否⼀样
//⾮空判断和class类型判断
//强转
//对象⾥⾯的字段⼀⼀匹配
重写规则
    class User {
        private int age;
        private String name;
        private Date time;
        // 省略setter和getter⽅法
        @Override
        public boolean equals(Object o) {
            if (this == o)
                return true;
            if (o == null || getClass() != o.getClass())
                return false;
            User user = (User) o;
            return age == user.age && Objects.equals(name, user.name) && Objects.equals(time, user.time);
        }
        @Override
        public int hashCode() {
            return Objects.hash(age, name, time);
        }
    }
问题:当向集合中插入对象时,如何判别在集合中是否已经存在该对象,比如Set确保存储对象的唯一,并判断是不是同一个对象呢?
- 依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法
 - 判断两个对象是否一样,首先判断插入obj的hashCode值是否存在,hashCode值不存在则直接插入集合,值存在则还需要判断equals方法判断对象是否相等
 
Java Objects工具类重点方法使用的更多相关文章
- Java Properties工具类详解
		
1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...
 - Java并发工具类 - CountDownLatch
		
Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...
 - Java Utils工具类大全(转)
		
源码和jar见:https://github.com/evil0ps/utils #Java Utils --- 封装了一些常用Java操作方法,便于重复开发利用. 另外希望身为Java牛牛的你们一起 ...
 - java日期工具类DateUtil-续一
		
上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...
 - java日期工具类DateUtil-续二
		
该版本是一次较大的升级,农历相比公历复杂太多(真佩服古人的智慧),虽然有规律,但涉及到的取舍.近似的感念太多,况且本身的概念就已经很多了,我在网上也是查阅了很多的资料,虽然找到一些计算的方法,但都有些 ...
 - java日期工具类DateUtil
		
一名优秀的程序员,不仅需要有着丰富解决问题的方案,还需要的便是代码的沉淀,这不仅有助于自己快速的开发程序,也有利于保证程序的健壮.那如何才能沉淀自己的”代码“呢?从自己编写util开始其实就是一个不错 ...
 - 基于AQS实现的Java并发工具类
		
本文主要介绍一下基于AQS实现的Java并发工具类的作用,然后简单谈一下该工具类的实现原理.其实都是AQS的相关知识,只不过在AQS上包装了一下而已.本文也是基于您在有AQS的相关知识基础上,进行讲解 ...
 - 25.大白话说java并发工具类-CountDownLatch,CyclicBarrier,Semaphore,Exchanger
		
1. 倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join ...
 - OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法
		
本篇主要讲解java.util.Arrays这个针对数组的工具类. 1.可复用的工具类和方法. 这个工具类里,包含很多针对数组的工具方法,如 排序.交换.二分查找.比较.填充.复制.hashcode ...
 - Java Utils工具类大全
		
源码和jar见:https://github.com/evil0ps/utils #Java Utils --- 封装了一些常用Java操作方法,便于重复开发利用. 另外希望身为Java牛牛的你们一起 ...
 
随机推荐
- iceoryx源码阅读(一)——全局概览
			
一.什么是iceoryx iceoryx是一套基于共享内存实现的进程间通信组件. 二.源码结构 iceoryx源码包括若干工程,整理如下表所示: 下图展示了主要项目之间的依赖(FROM:iceoryx ...
 - 前端scale负数表示翻转
			
https://blog.csdn.net/wang_yu_shun/article/details/121299208 极力推荐这个博主写的,前端有关负数的小技巧
 - C语言:如何删除超链接
			
单独写出一个函数出来,基本思想就是用fscanf一个一个字符读取出来,(文本流只能用fscanf,不能用fgetc等用于二进制流的函数,不然会导致乱码)遇到<的时候就停止读取,先把之前存进cop ...
 - JDK源码阅读-------自学笔记(二十)(java.util.List初探)
			
List简介 List是有序.可重复的容器. 有序:List中每个元素都有索引标记.可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素. 可重复:List允许加入重复的元素.更 ...
 - k8s快捷命令
			
查看node使用率: for i in `kubectl get nodes|awk '{print $1}'|sed '1d'`;do echo "=========>" ...
 - 阿里云sdk调用
			
slb调用 环境包安装 pip install alibabacloud_credentials --trusted-host mirrors.aliyun.com -i http://mirr ...
 - Semantic Kernel入门系列:利用YAML定义prompts functions
			
引言 在上一章节我们熟悉了prompts functions(提示函数)的创建,我们了解了PromptTemplateConfig中各个属性的简单使用.Semantic Kernel允许我们利用多种方 ...
 - SCSS随笔-mixin与@extend
			
变量 定义变量 $color-white: white; 使用变量 body { background-color: $color-white; } @mixin 与 @include 定义mixin ...
 - 在Cocos2d中拖动组件并吸附到节点
			
最近在学习制作小游戏,要实现一个拖动吸附效果,这里简单实现一下 代码实现 定义节点和函数功能 在properties里新建一个对象,用来接收目标区域的节点 properties:{ sense: { ...
 - iOS技术管理思路
			
iOS技术管理思路