fayedkhan Geschrieben 24. Februar 2010 Geschrieben 24. Februar 2010 Kann mir einer den unterschied zwischen array und list geben. eins soll statisch sein und das andere soll dynamsich sein. aber es gibt doch auch dynamische und statische arrays. ein dynamisches array, ist das die arraylist? und diese ist so ähnlich wie die list stimmt das??? bitte mal die eigenschaften von array und list auf schreiben...danke gruß Zitieren
Mcolli Geschrieben 24. Februar 2010 Geschrieben 24. Februar 2010 (bearbeitet) Zu nächst einmal hat ein Array eine statische größe und ist in jedem Fall Typ gebunden. Eine List musst nicht typgebunden sein und ist keinem Fall statisch. Bsp: try { [INDENT]int[] zahlen = new int[2]; zahlen[0] = 3; zahlen[1] = 1; zahlen[2] = 5; // IndexOutOfRangeExpcetion[/INDENT] } catch { [INDENT]for (int i = 0; i < zahlen.Length; i++) { [INDENT]Cosonole.WriteLine(zahlen[i]);[/INDENT] }[/INDENT] } List<int> zahlenList = new List<int>(); zahlen.Add(3); zahlen.Add(1); zahlen.Add(5); //Möglichkeit 1 for (int i = 0; i < zahlenList .Length; i++) { [INDENT]Cosonole.WriteLine(zahlenList [i]);[/INDENT] } //Möglichkeit 2 IEnumerator enu = zahlenList .GetEnumerator(); while (enu.MoveNext()) { [INDENT]Cosonole.WriteLine(enu.Current);[/INDENT] } Andere Vertreter der Listen, die von IList erben, sind nicht Typen gebunden und befinden sich im Namespace System.Collections, wie etwa ArrayList. Meiner, ich würde sagen reichhaltiger Erfahrung nach, lohnt sich in 90% der Fälle die Verwendung von List<deinTyp>. Wenn Du eine Liste mit verschiedenen Typen führen willst, deren Klassen Du selbst schreibst empfehle ich Dir eine Schnittstelle zu deffinieren, die Du in jede Konkrte Klasse einbindest und dann den Schnittstellentyp als List-Typ anzugeben: Schnittstelle: IKatalogartikel; Klassen: CD -- erbt von IKatalogartikel; Buch -- erbt von IKatalogartikel; XXXVideo -- erbt von IKatalogartikel; List<IKatalogartikel> list = new List<IKatalogartikel>(); list.Add(new CD("Slatko")); list.Add(new Buch("Der Fischer und das Meer")); list.Add(new XXXVideo("Schweinerei auf der Bounty")); Fortgeschrittenes Wissen: Klassen die von IList erben speichern die Objekte intern in einem Array mit dem Typ LinkedList. Es gibt alse eine LinkedList an jeder Position des Arrays. Wenn man ein Objekt zu der IList hinzufügen will, wird anhand des Hash-Wertes des Objektes und der aktuellen Länge der IListe der Index der LinkedList ermittelt in die das Objekt eingeordnet wird. Deshalb wäre es ein fataler Fehler die "bool Equals(object)"- Methode einer Klasse zu überschreiben ohne die "int GetHashCode()"-Methode zu überschreiben. Für die "GetHashCode()" muss folgende Aussage zutreffen: "Zwei Objekte die im Sinne der "bool Equals(object)" gelcih sind müssen den selben Hashwert besitzen" Die annahmen das Objekte, die im Sinne der "bool Equals(object)" nicht gleich Sinn, verschiedene Hashwerte Aufweisen müssen ist absolut falsch. Theoretisch würde es genügen eine Hashmethode so zu überschreiben: public override int GetHashCode() { [INDENT]return 1;[/INDENT] } Dies würde aber einen Performance Verlust bei der Suche in einer IList bedeuten da alle Objekte an derselben Index-Position gespeichert werden. Eine LinkedList ist eine Liste bei dem die einzelnen Bestandsteile Sequentiell Durchlaufen werden können. Bsp: LinkedListObjekt1--->LinkedListObjekt2-->LinkedListObjekt3 Wenn "LinkedListObjekt3" gesucht wird, wird "LinkedListObjekt1" (Anfang der Liste) gefragt "Bist du LinkedListObjekt3" --> Antwort "Nein". Im nächsten Schritt wird LinkedListObjekt1 angewiesen sein Folgeelement zu befragen usw. Bearbeitet 24. Februar 2010 von Mcolli Zitieren
lbm1305 Geschrieben 24. Februar 2010 Geschrieben 24. Februar 2010 Ich hatte mal gelesen oder gehört, dass generische Listen 100fach schneller sein sollen als Arrays. Listen sind (wie der Vorredner schon schrieb) dynamisch. Arrays machen auch bei einer gewissen Anzahl von Feldern Schluss. Besonders in Zeiten von LINQ / EF sind Listen besser, da man die genaue Anzahl von Datensätzen, die aus der DB kommen, nicht genau kennt. Zitieren
Mcolli Geschrieben 24. Februar 2010 Geschrieben 24. Februar 2010 Ich hatte mal gelesen oder gehört, dass generische Listen 100fach schneller sein sollen als Arrays. Hängt von der Größe der Liste ab.... schneller aber in jedem Fall ... es sei denn alle in der List gespeicehrten Objkete haben den gleichen HashCode .... denn dann muss die (einzige) LinkedList genauso wie ein Array durchlaufen werden. Zitieren
Pointerman Geschrieben 24. Februar 2010 Geschrieben 24. Februar 2010 Kommt es denn nicht darauf an, was man mit den Daten anfangen will? Bei einfachen lesenden und schreibenden Zugriffen, ohne Einfügen oder Löschen von Elementen, leuchtet mir nicht ein, warum da eine wie auch immer geartete Liste schneller sein soll als ein ganz normales Array. Wenn die Größe geändert, oder Element eingefügt oder gelöscht werden soll, ist klar, daß die list schneller ist. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.