В Java интерфейс Comparator позволяет клиенту указывать метод equals() и compare() для любого типа. Компаратор может быть передан большинству (или, возможно, всем) наборам, которые требуют сортировки, а методы в Компараторе будут использоваться вместо методов указанного класса. Это позволяет клиентам сортировать объекты таким образом, который отличается от их естественного упорядочения или даже сортировать объекты, которые не имеют естественного упорядочения (т. Е. Не реализуют Comparable).Почему Java не имеет интерфейса, подобного Компаратору, но для хэширования?
Почему нет подобного интерфейса для хеширования? Он может указывать два метода: hashCode() и equals() и быть полезными для HashSets или HashMaps таким же образом, чтобы компараторы были полезны для сортировки.
Редактировать: Для тех, кто отметил этот вопрос, дубликат this other question, я бы сказал, что в другом вопросе спрашивается, почему hashCode включен в каждый класс вместо интерфейса, в то время как этот вопрос касается абстрагирования хеширующей функции, позволяющей использовать несколько реализаций из этого.
Ответ Edit: Лучшие методы получения этой функции кажутся:
-Если ты в порядке, используя внешнюю библиотеку и/или уже используют Guava (который является фантастическая библиотека для целого ряда причин), Guava имеет класс Equivalence, который позволяет это.
-Если вы не хотите использовать внешнюю библиотеку, вы можете использовать настраиваемый адаптер, аналогичный тому, что сделано в верхнем ответе на this SO question.
Ознакомьтесь с http://stackoverflow.com/questions/15094818/compare-two-java-collections-using-comparator-instead-of-equals – sharakan
'equals()' и 'hashCode()' определены в Класс 'Object', поэтому ** каждый ** класс уже имеет их –
Во-первых,' hashCode' является встроенной версией из 'Object'. Это означает, что он всегда будет определен в любом классе. 'equals' также определяется в Object. Оба они всегда будут определены в любом случае, поэтому иметь интерфейс для них не имеет смысла. – 2013-03-16 23:00:36