为什么重写 equals 后还要重写 hashcode?
-
equals 方法本身就是为了判断两个对象是否相等。两个对象如果相等那么就应该具有相同的hashCode,这也是 JDK 源码中 hashCode 的常规协定。因此重写 equals 时参与的字段例如根据两个对象的 id 是否相等来判断两个对象是否相等,那么 id 也必须参与 hashCode 的计算,例如将 hashCode 的返回值改为返回 id 的 hashCode。这样对象相等 == id 相等 == hashCode 相等
== 和 equals 比较的区别
-
== 在比较基本数据类型时对比的是栈中的值,在比较引用类型时比较堆中内存存放的对象的地址
-
而 equals() 是 Object 提供的一个方法,只能比较引用类型。Object 中 equals() 方法默认采用 == 比较,但是 equals() 可以被重写来比较两个对象的值。(一般都会重写)
final 关键字的作用
-
修饰变量则该变量不可被重新赋值,修饰方法则该方法不可被子类重写,修饰类则该类无法被继承。(匿名类中所有变量必须是 final)
介绍 Java 的集合类
-
集合是一个容器,是一个载体,可以一次容纳多个对象。
-
集合顶级接口有 Collection 和 Map,Collection 接口是最基本的集合接口,不提供直接实现,Collection 所代表的时一种规则,它所存储的元素都必须遵循一条或多条规则。Map 是由一系列键值对组成的集合,提供了 key 到 Value 的映射。
-
Collection 的直接接口包含 List、Set、Queue。
List:列表,有序,元素可重复,实现类如下
-
ArrayList
-
LinkedList
-
Vector
-
Stack
Set: 集合,元素不可重复,实现类如下
-
HashSet
-
LinkedHashSet
-
TreeSet
-
EnumSet
Quene: 队列,有序,可重复,实现类如下
-
ArrayDeque
-
LinkedList
-
PriorityQueue
-
-
Map 的实现类有 HashMap、TreeMap、HashTable、Properties、EnumMap。