Есть ли реализация класса HashMap (или интерфейса карты), который позволит мне использовать альтернативные операции hashcode и equals ... Аналогично тому, как можно сортировать коллекции одного и того же типа несколькими способами, используя Comparator in Collections.sort (список, компаратор).Пользовательский hashcode/equals для HashMap
Я хотел бы избежать, если возможно, создания оболочки ключа, обеспечивающей желаемый хэш-код и равный операции.
В моем случае, один из сценариев, почему мне нужно что-то вроде этого:
В моем веб-приложение, для каждого запроса, я загружаю Расположение/ISP и другие данные. В разных частях кода (в слоях службы и репозитория) у меня есть «сведенные к минимуму» кеши, специфичные для его требований.
Вот упрощенный пример кода:
class GeoIpData{
private String countryName;
private String state;
private String city;
private String isp;
@Override
public int hashCode() {
//countryName hashCode
//state hashCode
//city hashCode
//isp hashCode
}
@Override
public boolean equals(Object obj) {
// compare countryName
// compare state
// compare city
// compare isp
}
}
Map<GeoIpData,#Type1> fullCache = ... //This cache needs to be unique per countryName,state,city and isp
Map<GeoIpData,#Type2> countryCache = ... //This cache needs to be unique per countryName
Map<GeoIpData,#Type2> ispCache = ... //This cache needs to be unique per countryName,isp
Для достижения этой цели вышеуказанные 3 карты необходимо 3 различных хэш-код и равняется методов.
fullCache:
hashCode -> GeoIpData.hashCode();
equals -> GeoIpData.equals(Object obj);
countryCache:
hashCode -> {countryName hashCode }
equals -> {compare countryName }
ispCache:
hashCode -> {countryName hashCode & isp hashCode }
equals -> {compare countryName & compare isp hashCode }
Привет «Noofz» Спасибо за совет, позвольте мне сначала выполнить некоторые тесты ... Вы использовали это раньше, если у вас есть, как он работает в многопоточных средах? Операция cache.get (...) выполняется от 5000 до 30000 раз в секунду и может увеличиться вдвое. – NeilA
Нет, к счастью, у меня нет опыта использования его при таком большом преодолении. – Mikhail
Прошел несколько тестов. Труд кажется немного медленнее ... – NeilA