2012-08-09 45 views
16

Mã băm của loại nguyên thủy, chẳng hạn như int? Ví dụ:Hashcode của số int

ví dụ: giả sử num là một trình chuyển đổi.

int hasCode = 0; 

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

Bạn không thể gọi phương pháp trên nguyên thủy. Mặc dù nó có thể được autoboxed, và sau đó là một 'Integer' (hoặc tương tự), bạn sẽ nhận được' Integer.hashCode'. –

+0

Trong trường hợp đó, chúng tôi có thể hữu ích hơn và thêm những gì hashCodes sẽ được cho các lớp wrapper. –

+0

Mã băm của một số nguyên là số nguyên. –

Trả lời

30

Đối với hashCode của một int lựa chọn tự nhiên nhất là sử dụng int riêng của mình. Câu hỏi hay hơn là những gì cần sử dụng cho số hashCode của số long vì nó không khớp với mã băm được mã hóa int. Nguồn tốt nhất của bạn cho rằng — và tất cả hashCode câu hỏi có liên quan — sẽ là Effective Java.

+11

Tôi đã tò mò về mã băm 'long' và đã tìm kiếm nó, đó là:' (int) (giá trị^(giá trị >>> 32)); ' –

+0

@platzhirsch Vâng, đó là cách nó được triển khai trong 'java.lang .Long', và đó là những gì Effective Java khuyến cáo. –

+0

@MarkoTopolnik thực sự tôi nghĩ [this] (http://download.java.net/openjdk/jdk7/) có lẽ hữu ích hơn rất nhiều. – oldrinb

8

Không có phương pháp hashCode() cho kiểu nguyên thủy int.

Integer là Wrapper kiểu lớp và hashcode() trả về một int

33

Taken từ mã nguồn 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; 
} 

đâu value là giá trị của các số nguyên.

+0

Lưu ý: Đó là chính xác nhưng câu hỏi có nghĩa là cho int nguyên thủy và không phải đối tượng Integer giữ giá trị 'số nguyên' – MANU

1

Phương thức java.lang.Integer.hashCode() trả về giá trị mã băm cho giá trị nguyên thủy của int nhưng được biểu thị dưới dạng đối tượng 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()); 
    } 

}` 

Kết quả:

Value = 20

Nguồn Link: http://www.tutorialspoint.com/java/lang/integer_hashcode.htm

+1

biến trung gian retval không thực sự cần thiết trong này mã vì nó chỉ được sử dụng một lần. –

Các vấn đề liên quan