He vuelto a implementar algunas de las estructuras de datos, funciones y clases integradas en un idioma en varias ocasiones. Como desarrollador integrado, la razón principal por la que lo haría es por la velocidad o la eficiencia. Las bibliotecas y tipos estándar fueron diseñados para ser útiles en una variedad de situaciones, pero hay muchos casos en los que puedo crear una versión más especializada que se personaliza para aprovechar las características y limitaciones de mi plataforma actual. Si el idioma no proporciona una forma de abrir y modificar las clases existentes (como se puede hacer en Ruby, por ejemplo), la reimplementación de la clase/función/estructura puede ser el único camino a seguir.
Por ejemplo, un sistema en el que trabajé usaba una CPU MIPS que era rápida cuando se trabajaba con números de 32 bits, pero más lenta cuando se trabaja con las más pequeñas. Recribí varias estructuras de datos y funciones para usar enteros de 32 bits en lugar de enteros de 16 bits, y también especifiqué que los campos estuvieran alineados con los límites de 32 bits. El resultado fue un aumento de velocidad notorio en una sección de código que estaba embotellando otras partes del software.
Dicho esto, no fue un proceso trivial. Terminé teniendo que modificar todas las funciones que usaban esa estructura y terminé teniendo que volver a escribir varias funciones de biblioteca estándar también. En esta instancia particular, los beneficios superan el trabajo. En el caso general, sin embargo, generalmente no vale la pena el problema. Existe un gran potencial para problemas difíciles de depurar, y casi siempre es más trabajo de lo que parece. A menos que tenga requisitos específicos o restricciones que las estructuras/clases existentes no cumplan, recomendaría no volver a implementarlas.
Como menciona Michael, de hecho es útil saber cómo para volver a implementar las estructuras, incluso si nunca lo hace. Puede encontrar un problema en el futuro que pueda resolverse aplicando los principios y las técnicas utilizadas en las estructuras de datos existentes.
como combinar el acceso aleatorio de ArrayList junto con add() y iterator.remove() de LinkedList para obtener una solución más eficiente para un vendedor ambulante? – Jason
por ejemplo ... pero los pls no olvidan, que saber cómo crear una implementación realmente buena no es tan fácil como parece. Es posible que desee tener en cuenta muchas cosas: rendimiento, límites de complejidad de la interfaz, concurrencia y otros. Es un buen ejercicio, pero la mayoría de las veces, cuando la situación lo permite, evite volver a implementar la biblioteca estándar de idiomas, la mayoría de las veces, es posible que se equivoque. Si busca ejemplos en Java, Google Collections tiene algunas implementaciones específicas, compruébelo :) –