"...je žádoucí přetížit i metodu equals(), a to takovým způsobem, aby tato metoda vracela hodnotu true v případě, že metoda compareTo() vrací nulu."
Tohle platí, ovšem přesně obráceně: Jestliže equals vrátí true, compareTo musí vrátit nulu.
Kdyby měla být aplikována autorova poučka na jeho příklad s rodnými čísly (compareTo vrací nulu v případě shody číslic před lomítkem), pak by equals vracela true pro lidi stejného pohlaví narozené v tentýž den (+ lidi narozené v okolních stoletích). Což je v případě použití rodného čísla například jako klíče v java.util.Map docela děsivá představa.
Pokud se pouze pretizi equals(), tak to pracovat bude, protoze se pri pristupu k prvkum nejdrive kontroluje hashCode(), ktery musi byt shodny soucasne s equals(). I kdyz se samozrejme jedna o krehky kod, ktery zavisi na tom, ze hashCode() pro kazda dve sestimistna cisla je rozdilny - coz je, ale pro jine JDK to nemusi platit ;-)
Je dobré neplést pojmy "přetížit" (overload) a "překrýt" (override). Přetížení metody equals() nevede k očekávanému výsledku (naopak může vést k velmi špatně vystopovatelné chybě), překrytí ano. Z kontextu je jasné, jak to myslíte, ale může to být dosti zavádějící.
Dále z textu není patrné, zda by měl člověk překrýt metodu equals() na komparátoru, nebo ve třídě Employee. Metoda Comparator.equals(Object) já trošku jinou sémantiku než Object.equals(Object).
A když už jsem za hnidopicha, tak ještě jedna drobnost. :-) Pojmy "třídit" a "řadit" v češtině znamenají něco jiného. Třídíme odpad, řadíme studenty podle jména.