[java]Hashcode内部に深く入り込む


[java]Hashcode内部に深く入り込む
 
   
Javaプログラミングではhashcode(ハッシュ符号化)はよく見られる言葉です.Java設計者がハッシュアルゴリズムに基づくハッシュ構造を使用して以来,ハッシュ符号化によって内部サポートを提供している.すべてのクラスはObjectクラスからhashcodeメソッドを継承します.この方法は,32ビットマシンにおいてすべてのオブジェクトに対して一意の32ビット整数型数値を返した.
    Hashcodeと== 32ビットマシンの場合、hashcodeメソッドを使用して2つの同じオブジェクトを比較すると、「真」という戻り値が得られます.このメソッドは、異なるオブジェクトに対して「偽」を返します.
    64ビットマシンの場合、hashcodeメソッドは32の整数型の数値を返しますが、これらの数値は64ビットのアーキテクチャではすべてのメモリアドレスに表示されません.この場合,異なるオブジェクトには同じハッシュ符号化がある.しかし、64ビットのマシンでは、同じオブジェクトのhashcodeに"=="を使用すると「真」が返されます.
 
次のコードと出力は、オブジェクトのhashcodeが一般的に同じであることを示します.
 
コード#コード#
package com.example; 
  
public class Test{ 
  
    public static void main(String[] args) { 
        Test t = new Test(); 
        System.out.println(t.hashCode()); 
        System.out.println(t.hashCode()); 
        Test t1 = new Test(); 
        System.out.println(t1.hashCode()); 
        System.out.println(t1.hashCode()); 
    } 
} 

しゅつりょく

  
  
  
  
  1. 259937031 
  2. 259937031 
  3. 779942019 
  4. 779942019 

 
Hasccodeアルゴリズム
 
    Objectクラスのソースコードはhashcodeメソッドがローカルメソッドであることを示しており,これはこのメソッドのコードがc言語のような低級言語で書かれていることを意味する.JAvaドキュメントのObjectクラスに対するこのメソッドの実装は以下のように参照されます.
 
As much as is reasonably practical, the hashCode method defined by 
class {@code Object} does return distinct integers for distinct 
objects. (This is typically implemented by converting the internal 
address of the object into an integer, but this implementation 
technique is not required by the 
JavaTM programming language.) 

Hashcodeを書き換える
 
   
Javaプログラマーが従うルールはめったにありません(少なくとも理論的にはそうです).「等しい」と「ハッシュ符号化」"書き換えは従うべきである.しかし、クラスオブジェクトの基本的なデータ構造をハッシュするために効率的なhashcodeメソッドが使用されるべきではない.実際には、Stringクラス書き換えhashcodeメソッドは最良の実践と使用を得た.しかし、Apache Commons HashBuilderのようなサードパーティjarパッケージはhashcodeの書き換えタスクを容易に処理し、良好な実装を提供する今.
 
There are few rules which any Java programmer is taught to follow (at least in theory). The equals and hashcode should always be followed. 
 
 
参照:http://www.javaexperience.com/java-dive-deep-into-hashcode-internals/
g:本当に通じにくい文もありますが、长い难しい文を见て理解しなければなりません.长い难しい文もありますが、意味が正しく理解できないかもしれません.それはもっと悪いです.坚持..
本文は 
「orangleliuノート

 ブログは、必ずこの出典を残してくださいhttp://blog.csdn.net/orangleliu/article/details/38309411