2012-08-09 15 views
16

Qual è l'hashcode di un tipo primitivo, ad esempio int?Hashcode di un numero

per esempio, diciamo che num era un interger.

int hasCode = 0; 

if (num != 0) { 
    hasCode = hasCode + num.hashCode(); 
} 
+1

Non è possibile chiamare metodi su primitive. Anche se può essere autoboxed, e poi come 'Integer' (o simile) otterrai' Integer.hashCode'. –

+0

In tal caso, potremmo essere più utili e aggiungere ciò che sarebbe hashCodes per le classi wrapper. –

+0

L'hashcode di un intero è il numero intero stesso. –

risposta

30

Per la hashCode di un int la scelta più naturale è quella di utilizzare il int stesso. Una domanda migliore è che cosa utilizzare per lo di un long poiché non si adatta all'hashcode di dimensioni int. La tua migliore fonte per quello — e tutte le domande relative allo hashCode — sarebbe Effective Java.

+11

Mi sono incuriosito dal codice hash "long" e l'ho cercato, è: '(int) (valore^(valore >>> 32));' –

+0

@platzhirsch Sì, è così che è implementato in 'java.lang .Long', ed è quello che raccomanda Java efficace. –

+0

@MarkoTopolnik in realtà penso che [questo] (http://download.java.net/openjdk/jdk7/) sia probabilmente molto più utile. – oldrinb

8

No hashCode() metodo per primitivo tipo int disponibili.

Integer è Wrapper tipo di classe e hashcode() restituisce un int

33

tratti dal codice sorgente Integer.class:

/** 
* Returns a hash code for this {@code Integer}. 
* 
* @return a hash code value for this object, equal to the 
*   primitive {@code int} value represented by this 
*   {@code Integer} object. 
*/ 
public int hashCode() { 
    return value; 
} 

Dove value è il valore del numero intero.

+0

Nota: È corretto ma la domanda era intesa per int primitivo e non oggetto intero che contiene il valore 'intero' – MANU

1

Il metodo java.lang.Integer.hashCode() restituisce un valore di codice hash per il valore primitivo di int ma rappresentato come un oggetto Integer.

/** 
* Returns a hash code value for an Integer, 
* equal to the primitive int value it represents. 
*/ 
public class IntegerDemo { 

    public static void main(String[] args){ 
     Integer i = new Integer("20"); 
     System.out.println("Value = " + i.hashCode()); 
    } 

}` 

Risultati:

valore = 20

Link alla fonte: http://www.tutorialspoint.com/java/lang/integer_hashcode.htm

+1

la variabile intermedia retval non è realmente necessaria in questo codice in quanto viene utilizzato solo una volta. –

Problemi correlati