关于JAVA中hashCode

hash code 即散列码根据对象计算出的一个整型值,散列码是没有规律的。
如果两个对象相等(equal() 返回true),则hashCode一定相等,如果两个对象hashCode相等,则对象不一定相等。
 
String类的散列码计算如下:根据内容计算
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. int hash = 0 ;  
  2. for ( int i = 0 ; i < length (); i ++) {  
  3.     hash = 31 * hash + charAt (i );  
  4. }  
Object类则是根据对象的存储地址计算的。
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. String s = "OK" ;                             
  2. StringBuilder sb = new StringBuilder (s);  
  3. String t = new String ("OK" );  
  4. StringBuilder tb = new StringBuilder (t);  
上面四个对象的散列码如下:
2524
25860399 
2524
5184781
字符串s和t的散列码相同,则是由内容计算出,而sb和tb的散列码则是根据存储地址而来。
 
HashCode方法作用:
在java的集合中Set是不允许元素有重复的,如果调用equal方法,新的元素每次都要和Set中所有元素比较一次,非常浪费时间。采用hash表原理可以提高效率。
hash码是由对象存储地址算出来的,根据hash码就可以找到对象的物理存储位置,只要判断该位置是否有元素即可。有则代表Set中已经有相等元素,没有,则可以将新元素插入Set中。
posted @ 2015-05-17 14:32  一箭中的  阅读(502)  评论(0编辑  收藏  举报