Java SE 第四十四,五讲 使用LinkedList实现Stack和Queue,hashCode和equals深度剖析与原

1.当向ArrayList添加一个对象时,实际上就是将该对象放置到了ArrayList底层所维护的数组当中;当向LinkedList中添加一个对象时,实际山LinkedList内部会生成一个Entry对

象,该Entry对象的结构为:
Entry

{

Entry previous;

Object element;

Entry next;

}

其中的Object类型的元素element就是我们想LinkedList中所添加的元素,然后Entry有构造好了向前和向后的引用previous,next,最后又将Entry对象加入到了链表当中,换句话说,Linkedlist中所维护的是一个个的Entry对象.

2.栈与队列:

实现

3.Set:是一个接口,不能包含重复的元素.实现的类:Hashset

4.Hash.set的toString()方法,调用元素的toString()方法.

5.Set是没有顺序的,没有重复元素的.

6.关于Object类的equals方法的特点:

①自反:X.equals(X);应该返回true.

②对称性:x.equals(y)为true,y.equals(x)也返回true.

③传递性:x.equals(y)为true,y.equals(z)为true,那么x.equals(z)为true.

④一致性:x.equals(y)的第一次 为true,那么x.equals(y)的第二次,第三次,第n次调用也应该为true,前提条件是在比较之间没有修改x也没有修改y,

⑤对于非空引用x,x.equals(null)应该返回false

7.hashCode()

关于Object类的hashCode()方法的特点:

①在Java应用的一次执行过程当中,对于同一个对象的hashCode方法的多次调用,他们应该返回同样的值(前提是该对象的信息没有发生变化)

②对于两个对象来说,如果使用equals方法比较 返回true,那么这两个对象的hashCode值一定是相同的.

③对于两个对象来说,如果使用equals方法比较,返回false,那么着两个对象的hashCode值不要求一定不同(可以相同,可以不同), 但是如果不同则可以提高应用的性能.

④对于Object类来说,Object类的不同对象地hashCode值是不一样的.(Object类的hashCode值表示的对象的一个地址转化来的整数)

8.当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code的值是否与增加的对象的hash code的值一直;如果不一致,直接加进去;如果一致,
再进行equals方法的比较,如果equals()如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去.

9.如果我们重写equals()时,那么也要重写hashCode()方法,反之亦然.

10.对于String类hashCode方法,其结果仅仅于字符值有关,而且其equals()比较的是字符串的内容,因此,不能够将内同相同的String实例不能够放在同一个集合中.

11.

posted @ 2011-03-01 22:44  donaldjohn  阅读(274)  评论(0编辑  收藏  举报