Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

533
Vistas
Cómo anular compareTo (Java)

Soy principiante en programación y tengo dos clases. Primera clase es:

 public class User implements Comparable<User>

con campo int age , constructor y método anulado de interfaz Comparable:

 @Override public int compareTo(User user) { return user.age >= age ? -1 : 0; }

La segunda clase es public class SortUser con un método para hacer una colección Set a partir de una Lista:

 public Set<User> sort(List<User> list) { Set<User> result = new TreeSet<>(); for (User user : list) { result.add(user); } return result; }

Me parece que todos los objetos de User en un conjunto deben ordenarse, pero cuando hice una lista con 3 objetos de User ...

 User a = new User(1); User b = new User(2); User c = new User(3); List<User> list = new ArrayList<>(); list.add(c); list.add(a); list.add(b);

(Ahora el orden de la lista es: 312 ) ...y creó un Set ( TreeSet ) de esa lista:

 SortUser sortUser = new SortUser(); Set<User> set = sortUser.sort(list);

Al final tengo un set con ese orden: 13 , significa que solo hay dos objetos en el set . ¿Qué está yendo mal?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Como veo, tiene una implementación incorrecta del método de comparación. ¿Podrías actualizarlo a?

 @Override public int compareTo(User user) { return Integer.compare(age, user.age); }
about 4 years ago · Santiago Trujillo Denunciar

0

Lo que estás haciendo con el TreeSet es innecesario. No estoy seguro de que estén garantizados para tener cierto orden cuando itera.

Simplemente reemplace su método de clasificación con

Collections.sort(list)

Y mi suposición de por qué se descarta un elemento es que su método compareTo nunca devuelve un 1 en ningún caso, por lo que los elementos siempre se consideran menores o iguales a otros elementos, lo que probablemente esté arruinando el TreeSet .

about 4 years ago · Santiago Trujillo Denunciar

0

Siga la siguiente metodología

En caso de cadena.

 public static Comparator<Employee> NameComparator = new Comparator<Employee>() { @Override public int compare(Employee e1, Employee e2) { return e1.getName().compareTo(e2.getName()); } };

En caso de valores enteros

 public static Comparator<Employee> SalaryComparator = new Comparator<Employee>() { @Override public int compare(Employee e1, Employee e2) { return (int) (e1.getSalary() - e2.getSalary()); } };
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda