code4Better Ответов: 1

Почему gethashcode в iEqualitycomparer


Я читал много статей об использовании GetHashCode, когда речь заходит о iEqualityComparer . Нет там, где указано, зачем нам это нужно. Кто-нибудь, пожалуйста, помогите мне здесь.

Ниже кода я попробовал. Мой метод equals сам выполняет сравнение, так в чем же заключается значение GetHashCode?

Что я знаю, так это то, что когда мы создаем любой объект/переменную, будет создан хэш-код/уникальный код. Например когда
Class Customer
{
public int Id;
}


Клиент c1 = новый клиент();
Customer c2 = new customer();


c1.value = 10;

c1.value = 10;


Теперь GetHashCode отличается для обоих, но значение одно и то же. Не знаете, где GetHashCode поможет?

В этом случае

Что я уже пробовал:

public class MyClass : System.Collections.Generic.EqualityComparer < MyObject > 
{ 
   public bool Equals(MyObject x, MyObject y) 
   { 
      return x.Equals(y); 
   } 
   public int GetHashCode(MyObject obj) 
   { 
      return obj.GetHashCode(); 
   } 
} 

1 Ответов

Рейтинг:
0

code4Better

Спасибо, Ричард. Я прочитал его и понял, что GetHashCode помогает в более быстром поиске ключей, что означает более быстрое сравнение. Это правда?

Richard Deeming

Он в основном используется, когда объект используется в качестве ключа в хэш-таблице (например: a Dictionary<TKey, TValue>Класс collection будет использовать хэш-код для разделения своего содержимого на несколько "ведер", что уменьшает количество элементов, которые он должен учитывать при поиске конкретного ключа.

До тех пор, пока хэш-код генерируется правильно, он будет делать операции сбора быстрее.

Вполне возможно иметь плохую реализацию хэш - кода-например, такую, которая возвращает постоянное значение для каждого объекта. В этом случае производительность хэш-таблицы снизится.

code4Better

Спасибо, Ричард. Ценю вашу помощь!