Metoda equals()
(i w tym przypadku także metoda compareTo()
) może stać się hotspotem wydajności (np. W dużym natężeniu ruchu HashMap
). Zastanawiałem się, jakie sztuczki ludzie przyjęli, aby zoptymalizować te metody w tych przypadkach, gdy okażą się konieczne.Metoda optymalizacji równań()
IntelliJ IDEA na przykład generuje następujące:
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
...
}
Co jeszcze można natknąć, które mogą być wskazówką do pisania dobrego wykonywania equals()
metody?
Powinienem wspomnieć, że metoda fabryczna rozdzieliłaby tę samą instancję z tabeli mieszającej po wywołaniu z równoważnymi wartościami. – devgeezer
Musisz zachować ostrożność przy "interningu". Może to prowadzić do problemów z wydajnością i wycieków pamięci, jeśli zostanie zrobione źle. Rzeczywiście, dlatego wywołanie String.intern() może być złym pomysłem. –
Są to dobre przestrogi, o których należy pamiętać. Myślę, że moja rada dotycząca optymalizacji polegałaby zazwyczaj na szukaniu gdzie indziej, chyba że posiadasz solidny dowód na to, że Equals (...) zajmuje niedopuszczalnie długi czas. – devgeezer