/ / Nejaký bod na prepísanie „equals ()“ v „AbstractMap.SimpleEntry <>“? „Equals ()“ by malo byť konečné? - java, zbierky, prepísanie metódy

Akýkoľvek bod na prevažujúce "sa rovná ()" v "AbstractMap.SimpleEntry <>"? "Rovná sa ()" by mala byť konečná? - java, zbierky, metóda-overriding

Teraz používam zbierky guava a som šťastný a šťastný. Ale chcem pochopiť, prečo môj vlastný kód nefungoval. Myslím, že som sa snažil urobiť nemožné:

Vytvoril som SortedSet<Map.Entry<K, V>> dátová štruktúra.Chyba bola v tom, že som niekedy v súprave dostal duplikáty. Pre mňa bol „duplikát“ Map.Entry ten, kde sa jeho kľúč zhodoval s kľúčom iného záznamu. Chcel som ignorovať hodnotu, pokiaľ ide o výpočet rovnosti.

Tu je však API:
AbstractMap.SimpleEntry: public boolean equals (Objekt o)

Bol som ako „Nie, to nechcem.“ Snažil som sa ohnúť SimpleEntry podľa mojej vôle tým, že som ho rozšíril a prepísal equals () tak, aby som pri rozhodovaní o rovnosti používal iba klávesy.

otázka
Vytváranie AbstractMap.SimpleEntry iba pomocou kľúča rozhoduje o rovnosti nejaký druh zvlnenie, ktoré by bolo takmer nemožné úplne pochopiť?

Existuje absolútne nejaký možný dôvod na prepísanie equals () v AbstractMap.SimpleEntry? Javadoc je pri rozhodovaní o rovnosti taký obmedzujúci, že by sa nemalo rovnať () finálny ?

odpovede:

2 pre odpoveď č. 1

It "s mysliteľný ktoré by ste mohli implementovať equals optimalizovaným spôsobom, napríklad ak ste predbežne načítali hashový kód kľúča. Inak áno, mal by sa považovať za konečný. Je súčasťou Map.Entry zmluva, že rovnosť musí byť testovaná na kľúči aj hodnote.