Saltar al contenido

El comparador que no distingue entre mayúsculas y minúsculas rompe mi TreeMap

Nuestro equipo especializado luego de ciertos días de trabajo y de juntar de datos, dimos con la solución, nuestro deseo es que te sea de gran utilidad en tu proyecto.

Solución:

Sucede porque TreeMap considera elementos iguales si a.compareTo(b) == 0. Está documentado en JavaDoc para TreeMap (énfasis mío):

Tenga en cuenta que el orden mantenido por un mapa de árbol, como cualquier mapa ordenado, y si se proporciona o no un comparador explícito, debe ser consistente con equals si este mapa ordenado es para implementar correctamente la interfaz Mapa. (Ver Comparable o Comparator para una definición precisa de consistente con equals.) Esto es así porque la interfaz del mapa se define en términos de la equals operación, pero un mapa ordenado realiza todo key comparaciones usando su compareTo (o compare) método, entonces dos keys que se consideran iguales por este método sondesde el punto de vista del mapa ordenado, igual. El comportamiento de un mapa ordenado está bien definido incluso si su orden no es consistente con equals; simplemente no cumple con el contrato general de la interfaz del Mapa.

Su comparador no es consistente con iguales.

Si desea mantener los elementos de mayúsculas y minúsculas que no son iguales pero son iguales, coloque un segundo nivel de verificación en su comparador, para usar el orden que distingue entre mayúsculas y minúsculas:

    public int compare(String o1, String o2) 
        int cmp = o1.compareToIgnoreCase(o2);
        if (cmp != 0) return cmp;

        return o1.compareTo(o2);
    

El Comparator pasas a un TreeMap determina no sólo el orden de los keys dentro de Maptambién determina si dos keys se consideran idénticos (se consideran idénticos cuando compare() devoluciones 0).

Por lo tanto, en su TreeMap“abc” y “ABC” se consideran idénticos keys. Maps no permiten idéntico keysentonces el segundo valor Element2 sobrescribe el primer valor Element1.

Debe asegurarse de que la igualdad de los elementos de ese mapa sea consistente con el comparador. Citando el comentario de la clase:

Tenga en cuenta que el orden mantenido por un mapa de árbol, como cualquier mapa ordenado, y si se proporciona o no un comparador explícito, debe ser consistente con iguales si este mapa ordenado debe implementar correctamente la interfaz.

Eres capaz de añadir valor a nuestra información cooperando tu veteranía en las reseñas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *