Objects工具类

  • jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法
  • 重点方法
    • equals

      • 用于字符串和包装对象的比较,先比较内存地址,再比较值
    • deepEquals
      • 数组的比较,先比较内存地址,再比较值,如String、char、byte、int数组,或者包装类型Integer等数组
    • hashCode
      • 返回对象的hashCode,若传入的为null,则返回0
    • hash
      • 传入可变参数的所有值得hashCode的总和,底层用Arrays.hashCode
    • 可变参数

重写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工具类重点方法使用的更多相关文章

  1. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  2. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

  3. Java Utils工具类大全(转)

    源码和jar见:https://github.com/evil0ps/utils #Java Utils --- 封装了一些常用Java操作方法,便于重复开发利用. 另外希望身为Java牛牛的你们一起 ...

  4. java日期工具类DateUtil-续一

    上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...

  5. java日期工具类DateUtil-续二

    该版本是一次较大的升级,农历相比公历复杂太多(真佩服古人的智慧),虽然有规律,但涉及到的取舍.近似的感念太多,况且本身的概念就已经很多了,我在网上也是查阅了很多的资料,虽然找到一些计算的方法,但都有些 ...

  6. java日期工具类DateUtil

    一名优秀的程序员,不仅需要有着丰富解决问题的方案,还需要的便是代码的沉淀,这不仅有助于自己快速的开发程序,也有利于保证程序的健壮.那如何才能沉淀自己的”代码“呢?从自己编写util开始其实就是一个不错 ...

  7. 基于AQS实现的Java并发工具类

    本文主要介绍一下基于AQS实现的Java并发工具类的作用,然后简单谈一下该工具类的实现原理.其实都是AQS的相关知识,只不过在AQS上包装了一下而已.本文也是基于您在有AQS的相关知识基础上,进行讲解 ...

  8. 25.大白话说java并发工具类-CountDownLatch,CyclicBarrier,Semaphore,Exchanger

    1. 倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join ...

  9. OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法

    本篇主要讲解java.util.Arrays这个针对数组的工具类. 1.可复用的工具类和方法.  这个工具类里,包含很多针对数组的工具方法,如 排序.交换.二分查找.比较.填充.复制.hashcode ...

  10. Java Utils工具类大全

    源码和jar见:https://github.com/evil0ps/utils #Java Utils --- 封装了一些常用Java操作方法,便于重复开发利用. 另外希望身为Java牛牛的你们一起 ...

随机推荐

  1. ContextCapture-硬件配置推荐

    ContextCapture倾斜摄影的空三计算.三维建模应用.非常耗费硬件资源,适当调整硬件配置,可以显著提高模型处理时间. 硬件常见问题 随着倾斜摄影建模算法成熟,应用越来越广泛,数据量越来越大,需 ...

  2. es部署

    部署单机版es tar xf elasticsearch-7.16.0-linux-x86_64.tar.gz./bin/elasticsearch -dcan not run elasticsear ...

  3. 安装 MySQL ZIP 版本

    安装 MySQL 的 ZIP 版本相对于安装包版本稍微复杂一些,因为它需要手动解压和配置.以下是在 Windows 上安装 MySQL ZIP 版本的步骤: 下载 MySQL ZIP 文件: 前往 M ...

  4. linux下常用的快捷键和$参数

    1.下面介绍两个在linux下非常有用的$参数 2.!$ 表示引用上一个命令的最后一个参数,例子如下: [root@node5 ~]# echo '!$的作用是引用上一个命令的最后一个参数' > ...

  5. java jdbc 得到像C#里的datatable一样的表格

    public ArrayList<ArrayList<String>> getDataTale2(String sql) throws SQLException { Array ...

  6. Android 13 - Media框架(32)- ACodec(八)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 拖了好久都没有更新,前面写的东西都有些忘了,回过头来再看之前写的内容,觉得有很多地方写的不好,或者说现在又有了新的理解,想要重新修改但是需要修改的内 ...

  7. WPF加载GIF的五种方式(Storyboard / WpfAnimatedGif / ImageAnimator / PictureBox / MediaElement)

    部分内容参考博文WPF 如何显示gif 一.使用Storyboard 效果: (1)页面xaml: <Window x:Class="PlayGifDemo.StoryboardWin ...

  8. 如何5分钟上手使用OCR

    随便打开一个Microsoft Visual Studio,新建一个WinForms项目,从下面列表中随便选择一个NET框架. net35;net40;net45;net451;net452;net4 ...

  9. docker lnmp

    #wiki: https://github.com/2233466866/lnmp/wiki #安装docker wget -O /etc/yum.repos.d/ali_docker-ce.repo ...

  10. react this指向问题

    在JSX事件函数方法中的 this,默认不会绑定 this指向.如果你忘记绑定,当你调用这个函数的时候 this 的值为 undefined.所以使用时一定要绑定好this的指向. 构造方法中绑定 c ...