Giới thiệu
Để lấy mã băm (hash code) của một giá trị long (Int64), bạn gọi phương thức GetHashCode() trên thể hiện. Mã băm dùng cho các cấu trúc dữ liệu dựa trên băm như Dictionary, HashSet.
Ví dụ 1: Hai giá trị long khác nhau
using System;
public class Demo
{
public static void Main()
{
long val1 = 8768768768;
long val2 = 7889765555;
Console.WriteLine("Giá trị 1 = " + val1);
Console.WriteLine("Giá trị 2 = " + val2);
Console.WriteLine("Chúng có bằng nhau không? = " + val1.Equals(val2));
Console.WriteLine("Giá trị 1 (HashCode) = " + val1.GetHashCode());
Console.WriteLine("Giá trị 2 (HashCode) = " + val2.GetHashCode());
}
}
Kết quả
Giá trị 1 = 8768768768 Giá trị 2 = 7889765555 Chúng có bằng nhau không? = False Giá trị 1 (HashCode) = 178834178 Giá trị 2 (HashCode) = -700169038
Ví dụ 2: Giá trị 0 và Int64.MaxValue
using System;
public class Demo
{
public static void Main()
{
long val1 = 0;
long val2 = Int64.MaxValue; // 9223372036854775807
Console.WriteLine("Giá trị 1 = " + val1);
Console.WriteLine("Giá trị 2 = " + val2);
Console.WriteLine("Chúng có bằng nhau không? = " + val1.Equals(val2));
Console.WriteLine("Giá trị 1 (HashCode) = " + val1.GetHashCode());
Console.WriteLine("Giá trị 2 (HashCode) = " + val2.GetHashCode());
}
}
Kết quả
Giá trị 1 = 0 Giá trị 2 = 9223372036854775807 Chúng có bằng nhau không? = False Giá trị 1 (HashCode) = 0 Giá trị 2 (HashCode) = -2147483648
Lưu ý: Hash code của Int64 được tính toán từ giá trị số. Hai giá trị bằng nhau sẽ có cùng hash code. Hash code có thể trùng lặp cho các giá trị khác nhau (collision), do đó Equals vẫn cần thiết khi so sánh trong Dictionary/HashSet.