Ich habe einige der integrierten Datenstrukturen, Funktionen und Klassen einer Sprache mehrfach implementiert. Als Hauptentwickler ist der Hauptgrund, dass ich das tue, Geschwindigkeit oder Effizienz. Die Standardbibliotheken und -typen wurden entwickelt, um in einer Vielzahl von Situationen nützlich zu sein. Es gibt jedoch viele Fälle, in denen ich eine speziellere Version erstellen kann, die auf die Funktionen und Einschränkungen meiner aktuellen Plattform zugeschnitten ist. Wenn die Sprache keine Möglichkeit bietet, existierende Klassen zu öffnen und zu modifizieren (wie Sie es zum Beispiel in Ruby können), dann kann die Wiederverwendung der Klasse/Funktion/Struktur der einzige Weg sein.
Zum Beispiel hat ein System, an dem ich gearbeitet habe, eine MIPS-CPU verwendet, die beim Arbeiten mit 32-Bit-Zahlen schnell, bei kleineren aber langsamer war. Ich habe mehrere Datenstrukturen und Funktionen neu geschrieben, um 32-Bit-Ganzzahlen anstelle von 16-Bit-Ganzzahlen zu verwenden, und außerdem angegeben, dass die Felder an 32-Bit-Grenzen ausgerichtet sind. Das Ergebnis war eine bemerkenswerte Geschwindigkeitssteigerung in einem Codeabschnitt, der andere Teile der Software unter Druck setzte.
Das gesagt, es war kein trivialer Prozess. Ich musste schließlich jede Funktion ändern, die diese Struktur benutzte, und ich musste auch einige Standardbibliotheksfunktionen neu schreiben. In diesem besonderen Fall überwogen die Vorteile die Arbeit. Im allgemeinen Fall ist es jedoch normalerweise nicht die Mühe wert. Es gibt ein großes Potenzial für schwer zu debuggende Probleme, und es ist fast immer mehr Arbeit, als es aussieht. Sofern Sie keine spezifischen Anforderungen oder Einschränkungen haben, die die vorhandenen Strukturen/Klassen nicht erfüllen, würde ich empfehlen, sie nicht erneut zu implementieren.
Wie Michael erwähnt, ist es in der Tat nützlich zu wissen wie Strukturen wieder zu implementieren, auch wenn Sie es nie tun. In der Zukunft könnte ein Problem auftreten, das durch die Anwendung der in bestehenden Datenstrukturen verwendeten Prinzipien und Techniken gelöst werden kann.
Kombinieren Sie den wahlfreien Zugriff von ArrayList zusammen mit add() und iterator.remove() von LinkedList, um eine effizientere Lösung für einen reisenden Verkäufer zu erhalten? – Jason
zum Beispiel ... aber bitte vergessen Sie nicht, dass es nicht so einfach ist zu wissen, wie man eine wirklich gute Implementierung erstellt. Vielleicht möchten Sie viele Dinge im Hinterkopf behalten - Leistung, Schnittstellenkomplexität, Nebenläufigkeit und andere. Es ist eine gute Übung, aber die meiste Zeit, wenn die Situation es erlaubt, vermeiden Sie die Neuimplementierung von Sprachen Standard-Bibliothek, die meisten Male, könnten Sie es einfach falsch bekommen. Wenn Sie nach Beispielen in Java suchen, Google Sammlungen haben einige spezifische Implementierungen ihrer eigenen, überprüfen Sie sie :) –