Effective Java 学习笔记(9)
通常,有一类问题的产生都是由于没有重载hashCode这个方法. 当你重载equals后,hashCode必须重载,否则在使用HashMap, HashSet, Hashtable的时候,会出错.
对于hashCode有几个原则.
1. 不管什么时候调用hashCode,如果同一个对象与hashCode相关的字段没有修改的话,这个方法的返回值必须相同. 但不必和另一个应用程序中的值相等.
2. 当两个对象equals的时候,其hashCode也必须相同.
3.没有强制两个不一样的对象不能返回相同的hashCode, 但是要注意的,如果Hash表中冲突太多,会降低程序性能.
一个好的hashCode函数,能对不同的对象返回不同的值。写一个好的hashCode不是想像的那么困难,如果参照以下的方法的话:
1. 储存一个非零常量,如17,作为返回值。
2. 对每一个有比较意义的成员,参照以下:
a. 计算数字型的hash code
i. 如果是boolean, 计算(f?1:0)
ii. 如果是byte char,short or int 计算,(int)f
iii. 如果是long, 计算(int) ( f ^ (f >>>32))
iv. 如果是float, 计算Float.floatToIntBits(f);
v. 如果是double, 计算Double.doubleToLongBits(f), 得到长整型数字请参见 iii.
vi. 如果是个对象的引用,就调用这个对象的hashcode
vii,如果是数组,就对每个元素按上述原则做。
b. 计算hashCode 按以下公式。
result = 31 * result + c; // c是 上面计算的值
3. 返回值。
4. 写测试用例测试。
要注意的是,你可以在hashCode中忽略一些值,但是同样,这些值也不能在equals中引用。
相关文档:
Java.sql包中的 java.sql.Driver, jdbc.sql.Connection等提供给程序开发人员统一的开发接口,数据库提供商提供相应的实现,对程序开发人员来讲只要知道这些接口都有哪些方法就可以了。但我们可以深入一些看看到底这里面都做了那些事, 同时也可以学习其中的编程模式(如Interface模式等)。
1、 Class.forName(String cl ......
术语名称:Factory
术语解释:工厂模式,用来提供创建对象的接口.
工厂模式功能的详细解释:
工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象 ......
1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。
2、命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer、
HtmlConverter、jar、
java、javac、javadoc、javap、javaw、native2ascii、serialver,如果这些命 ......