Zum Inhalt springen

Array vs list


fayedkhan

Empfohlene Beiträge

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Mcolli
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...