Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Lấy mã băm (hash code) cho thể hiện Int64 hiện tại trong C#

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.