==: ==比较的是栈中的内容, 基本数据类型比较的是值, 引用类型比较的是内存地址
equals: Object的equals方法是用==实现的, 用法一样, 但是通常会重写该方法, 比如string重写后, 比较的是值内容
hashCode相当于对象的指纹信息, 但是java做不到这么绝对, 但是还是能提前做一下判断
equals默认是比较引用地址, 通常会重写
在java一些集合的实现, 判断对象是否相等, 会先比较两个对象的hash, 如果hash不同, 直接认定两个对象不同, 如果hash相同, 再调用equals进一步比较, 因为equals相对hash比较重
如果重写了equals, 通常也要重写hash
ArrayList底层结构是数组, 是一块连续的内存空间, 对内存要求更高. 随机访问性能更高, 中间增删改性能差, 需要拷贝后面所有元素
LinkList底层结构是链表, 增删改性能差, 查询只能依次遍历下一个节点.LinkList还实现了Deque, 可以当做队列
JDK 1.7:
JDK 1.8:
extends T> 表示包括T在内的所有子类
super T> 表示包括T在内的所有T的父类
所有异常都来自顶级父类Throwable
Throwable下有两个子类Exception和Error
Exception:
比如一个链表, 1 > 2 > 3 > 4 > 5, 改成54321
public class FlipList {
// 迭代
public static Node iteraor (Node node) {
Node prev = null, next;
while (node != null) {
next = node.next;
node.next = prev;
prev = node;
node = next;
}
return prev;
}
public static void main(String[] args) {
Node node5 = new Node(5, null);
Node node4 = new Node(4, node5);
Node node3 = new Node(3, node4);
Node node2 = new Node(2, node3);
Node node1 = new Node(1, node2);
Node head = iteraor(node1);
System.out.println(head);
}
static class Node{
private int val;
private Node next;
public Node(int val, Node next) {
this.val = val;
this.next = next;
}
}
}