zoukankan      html  css  js  c++  java
  • Java Objects工具类重点方法使用

    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方法判断对象是否相等
  • 相关阅读:
    ORACLE 11.2.0.4 OCR VOTING DISK 模拟恢复场景
    Oracle Enterprise Linux 6.4 下配置vncserver
    Oracle Enterprise Linux 6.4 下挂载ISCSI 设备
    关于Solaris 的磁盘的分区
    【Google Earth】pro之视频录制
    【爱江山越野跑】ITRA积分认证流程
    android发送邮件
    android手机有多个摄像头,打开其中一个
    Android截图
    Android中的ACCESS_MOCK_LOCATION权限使用Demo
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13407269.html
Copyright © 2011-2022 走看看