von Xardas2 » 8. Jan 2011, 15:33
Der Sinn einer Liste ist ganz einfach. Wenn du ein Programm zur verwaltung von irgendwelchen Daten schreibst (Adressbuch), oder einen Text nach irgendwelchen Schlüsselwörtern durchsuchst (Compiler/Parser, Editor, Filter ...), Benutzereingaben bzw. allgemein wenn du irgendwelche Werte puffern musst, da du schneller Neue bekommst als du die alten bearbeiten kannst (Kommunikation zwischen mehreren Geräten z.B. Chatprogramm über LAN/Internet oder Messwerterfassung).
Der wesentliche Vorteil von verketteten Listen ist, dass sie in solchen Fällen Speichereffizienter sind und einen Stabilen Programmablauf garantieren.
Wenn du ein Array verwendest, wird ja bei Start deiner Anwendung eine gewisse Menge Speicher allokiert (reserviert).
Dieser ist für das System dann nicht mehr weiter nutzbar, auch wenn dein Programm eigentlich nur einen kleinen Bruchteil davon bräuchte, um z.B. Benutzereingaben zu puffern. Wenn du jedoch weniger Speicher allokierst und der Benutzer mehr Werte speichern will, als du vorgesehen hast oder wenn auf Grund einenr zu hohen Netzauslastung die Nachricht nicht gleich gesendet werden kann und dadurch mehrere Nachrichten Zwischengespeichert werden müssen, dann stürzt deine Anwendung mit einer für den Benutzer wenig sagenden Fehlermeldung ab.
Eine Liste dagegen allokiert zur Laufzeit deiner Anwendung immer nur dann neuen Speicher, wenn er wirklich benötigt wird und nutzt somit den Speicher trotz des Overheads (der zur Verwaltung der Liste zusätzlich benötigte Speicher) effizienter. Somit kann es zu kein Overflow des allokierten Speichers kommen. Den Fehlerfall, dass der Benutzer einen neuen Wert in der Liste Speichern will, aber das System nicht mehr über genügend Speicherplatz verfügt, kannst du elegant abfangen und dem Benutzer mitteilen, ohne dass die Anwendung abstürzt und die bisherige Arbeit zunichte macht.
Bei Zugriff auf die gespeicherten Werte und für die Verwaltung (neues Listenelement hinzufügen/entfernen) benötigt so eine Liste je nach Typ und Anzahl der Werte etwas mehr Zeit.
FAZIT:
Wenn du weist, dass dein Programm immer nur eine feste Anzahl von Werten Speichern muss und eine geringe Varianz* besitzt, benutze ein Array.
Soll deine Anwendung jedoch verschieden viele Werte verwalten können, dann lohnt sich der Einsatz einer Liste.
Gruß Xardas2
* wie groß der Unterschied der zu erwartenden Anzahl der Werte sein darf, musst du selbst festlegen, denn dies ist stark von der Größe des zu Speichernden Wertes und des eingesetzten Systems abhängig. Ob du 100 Integer mehr oder weniger speicherst macht im normal Fall keinen Unterschied (400 Byte von 2 - 4 GB ist vernachlässigbar). Wenn du jedoch keine Standardspeichertypen verwendest sondern gröere Strukturen oder Klassen, oder du dich auf einer sehr Hardwarenahen Schicht befindest (z.B. Mikrocontroller) können 10 Werte mehr oder weniger schnell eine große Rolle spielen.