1.栈(stack)后进先出
队列(queue)先进先出
2.当向ArrayList添加一个对象(实际上是对象的引用),实际上就是将该对象放置到了ArrayList底层所维护的数组中;当向LinkedList中添加一个对象时,实际上linkedList内部会生成一个Entry对象,该Entry对象的结构如下:
Entry
{
Entry previous;
Object element;
Entry next;
}
其中Object类型的元素elemnet就是我们向LinkedList中所添加的元素,然后Entry又构造好了向前与向后的引用previous, next最后将生成的这个Entry对象加入到了链表当中。换句话说LinkedList中所维护的是一个个Entry对象。
3.关于Object类的equals方法的特点
1)自反性:x.equals(x)应该返回true;
2)对称性:x.equals(y) 为true,那么 y.equals(x)也为true.
3)传递性:x.equals(y) 为true, y.equals(z)为true,那么 x.equals(z)也为true.
4)一致性:x.equals(y)第一次调用为true,第二次,第三次调用也为true,前提是x,y都没有变化。
5)对于非空引用x, x.equals(null)返回false.
4.关于Object类的hashCode()方法的特点:
1)在java应用的一次执行过程中,对于同一个对象的hashCode方法的多次调用,他们应该返回同样的值(前提是该对象信息没有发生改变)
2)对于两个对象来说,如果使用equals方法返回true,那么这两个对象的hashCode()值一定是相同的。
3)对于两个对象来说,如果使用equals方法比较返回false,那么这两个对象的hashCode()值不要求一定不同(可以相同,可以不同),但是如果不同,则可以提高性能。
4)对于Object类来说,不同的Object对象的hashCode()值是不同的(Object类的hashCode()值表示的是对象的地址)
5.当使用HashSet()的时候,hashCode()就会得到调用。判断已经存储在集合中的对象的Hashcode值,是否与增加的对象的hashcode值相同。如果不一致—直接加进去;如果一直—再进行equals方法比较。如果equals返回true,表明对象已经加进去了,就不会再增加新对象;如果返回false,就直接加进去。
6.如果重写equals方法,那也要重写hashCode()方法;重写hashCode()方法,那就要重写equals方法。一般两个方法一起改变。
7.eclipse中的source–generate hashCode() and equals会自动重写hashCode() 和equals方法