Убедись, что для разных объектов возвращаются действительно разные значения compareTo. Что не так?