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本身就是一个顶层接口