Java equals 关键词的学习笔记

Object里的equals的默认实现

public boolean equals(Object obj) {
    return (this == obj);
}

equals()与hashcode()

两个对象equals相等-》这两个对象的hashcode必须相等,否则吧对象存入list和map时,直接或者间接的调用contains方法时,会判断不准确。

两个对象hashcode相等,equals方法不 一定相等

基础数据类型的比较

基本数据类型的比较,jvm会取地址直接进行比较

基本数据类型包装类的equals的比较与==的用法

8种基本数据类型包装类的equals都被重写过,比较的事对象的内容是否相等,而不是比较对象的地址

List是如何判断一个元素是否已经存在了的

往list添加元素时,需要考虑添加的元素是否时重复的~~~

 查看java.lang.AbstractList源码里有下面的代码
public boolean equals(Object o) {
    if (o == this)
        return true;
    if (!(o instanceof List))
        return false;

    ListIterator<E> e1 = listIterator();
    ListIterator<?> e2 = ((List<?>) o).listIterator();
    while (e1.hasNext() && e2.hasNext()) {
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1==null ? o2==null : o1.equals(o2)))
            return false;
    }
    return !(e1.hasNext() || e2.hasNext());
}

ArrayList 和LinkedList底层实现不一样,

arraylist的indexof会调用内部的ElementData[]然后挨个遍历元素

LinkedList的内部自定义了一个Node结构体数组(该结构体内部存储了currentItem,next,previous),其实遍历方式和数组是差不多的

接口是否也继承自object和拥有object的方法?

定义一个全新的接口(不继承自任何负累),然后通过接口的getSuperClass和getSuperMethod方法可以查看是否有用权限去调用----》发现接口的父类是null,接口的getmethods是也只有接口本身定义的方法

List接口与Map接口里定义的equals是如何作用在各自的子类上的

List和Map都是Interface,List->Collection->Iterable,而Map本身就是一个顶层接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值