es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál sería el impacto de utilizar un TreeSet con un comparador que permite duplicados?

El problema (No hay árbol binario con duplicados en las colecciones de Java)

Necesito un árbol binario con duplicados, necesito la complejidad de búsqueda e inserción O(Log(n)) manteniendo el orden (por lo que no puedo usar tablas hash), Java no tiene una colección que implemente un árbol binario y permita duplicados manteniendo todas las operaciones de un árbol binario.

¿Podemos usar TreeSet para hacer esto?

Estoy tratando de ajustar TreeSet y permitir duplicados pasando un comparador que nunca devuelve 0. Sé que esto ya no será un conjunto pero está bien, necesito duplicados.

Ejemplo
java
TreeSet<Integer> arbolBinarioConDuplicados = new TreeSet<Integer>((x, y) -> x>y?1:-1);

¿Habrá algún efecto secundario indeseable de esta implementación y uso?
porque obviamente estamos violando las reglas en la API del comparador como la regla del signo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Si bien es técnicamente posible modificar el TreeSet y permitir duplicados mediante el uso de un comparador que nunca devuelve 0, no se recomienda hacerlo. Esto se debe a que el TreeSet está diseñado para hacer cumplir estrictamente las reglas de la interfaz Comparator. Cuando violamos estas reglas, corremos el riesgo de encontrarnos con problemas o errores imprevistos. Además, depender de este tipo de modificaciones puede hacer que nuestro código sea más difícil de mantener y entender para otros desarrolladores.

    En su lugar, puede ser mejor implementar nuestra propia estructura de datos de árbol binario que permita duplicados y haga cumplir nuestro orden deseado. Luego podemos implementar todas las operaciones necesarias del árbol binario (como búsqueda e inserción) manteniendo la complejidad O(Log(n)). Este enfoque puede requerir más tiempo y esfuerzo para implementarlo, pero asegura que nuestro código sea confiable y siga las prácticas estándar.

Comments are closed.