¿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
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.
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 elTreeSet
está diseñado para hacer cumplir estrictamente las reglas de la interfazComparator
. 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.