Heim  >  Artikel  >  Backend-Entwicklung  >  Erfahren Sie mehr über die Unterschiede zwischen Arrays, Listen und ArrayLists

Erfahren Sie mehr über die Unterschiede zwischen Arrays, Listen und ArrayLists

青灯夜游
青灯夜游nach vorne
2019-11-25 16:44:433004Durchsuche

Einige Wissenspunkte werden möglicherweise ständig verwendet, aber in der tatsächlichen Entwicklung kennen wir sie möglicherweise nur und wissen nicht warum, sodass regelmäßige Zusammenfassungen eine große Hilfe für unsere Verbesserung und unseren Fortschritt sein werden. Der folgende Artikel stellt Ihnen die Unterschiede zwischen Arrays, Listen und ArrayLists vor. Ich hoffe, er wird Ihnen hilfreich sein.

Erfahren Sie mehr über die Unterschiede zwischen Arrays, Listen und ArrayLists

Der Unterschied zwischen Array, Liste und ArrayList

Arrays werden kontinuierlich im Speicher gespeichert Daher ist die Indizierungsgeschwindigkeit sehr hoch und das Zuweisen und Ändern von Elementen ist ebenfalls sehr einfach, z. B.:

string[] s=new string[3];
//赋值
 s[0]="a"; s[1]="b"; s[2]="c";
//修改
 s[1]="b1";

Arrays weisen jedoch auch einige Mängel auf. Beispielsweise ist es sehr mühsam, Daten zwischen zwei Daten in einem Array einzufügen. Wenn wir ein Array deklarieren, müssen wir auch die Länge des Arrays angeben. Wenn die Länge des Arrays zu lang ist, führt dies zu einer Speicherverschwendung. Wenn die Länge des Arrays zu kurz ist, führt dies zu einem Datenüberlauffehler. Dies wird sehr problematisch, wenn wir die Länge des Arrays bei der Deklaration nicht kennen. Um diese Mängel zu beheben, stellte C# zunächst das ArrayList-Objekt bereit.

ArrayList ist eine spezielle Klasse, die von .Net Framework zum Speichern und Abrufen von Daten bereitgestellt wird. Sie ist Teil des Namespace System.Collections. Seine Größe vergrößert und verkleinert sich dynamisch entsprechend den darin gespeicherten Daten. Daher müssen wir bei der Deklaration des ArrayList-Objekts seine Länge nicht angeben. ArrayList erbt die IList-Schnittstelle, sodass es problemlos Daten hinzufügen, einfügen und entfernen kann. Aus dem obigen Beispiel geht hervor, dass ArrayList alle Mängel von Arrays löst. Es ist also perfekt Wird die Liste nach C# 2.0 erneut angezeigt?


In die Liste haben wir nicht nur die Zeichenfolge „abc“ eingefügt, sondern auch die Zahl 123. Auf diese Weise ist das Einfügen verschiedener Datentypen in ArrayList möglich. Weil ArrayList alle darin eingefügten Daten als Objekttyp behandelt. Wenn wir also die Daten in der ArrayList verwenden, um das Problem zu lösen, wird wahrscheinlich ein Typkonfliktfehler gemeldet, was bedeutet, dass die ArrayList nicht typsicher ist. Auch wenn wir sicherstellen, dass wir beim Einfügen von Daten vorsichtig sind und denselben Datentyp einfügen, müssen wir sie bei der Verwendung dennoch in die entsprechenden Originaltypen konvertieren, um sie verarbeiten zu können. Dabei handelt es sich um Ein- und Auspackvorgänge, die zu großen Leistungseinbußen führen.

Das Konzept des Boxens und Unboxings

: Einfach ausgedrückt: Boxen: Packen von Werttypdaten in eine Instanz eines Referenztyps, z. B. Zuweisen des Werts 123 des Typs int zum Objektobjekt o

ArrayList list = new ArrayList();
//新增数据
 list.Add("abc"); list.Add(123);
//修改数据
 list[2] = 345;
//移除数据
 list.RemoveAt(0);
//插入数据 
list.Insert(0, "hello world");
Unboxing: Es dient zum Extrahieren des Werttyps aus den Referenzdaten. Weisen Sie beispielsweise den Wert des Objekts o einer Variablen vom Typ int i zu.

int i=123; object o=(object)i;

Der Prozess des Boxens und das Auspacken ist sehr leistungsintensiv.

Gerade weil ArrayList die Nachteile unsicherer Typen sowie Boxing und Unboxing aufweist, tauchte das Konzept der Generika nach C# 2.0 auf. Die List-Klasse ist das generische Äquivalent der ArrayList-Klasse. Der größte Teil seiner Verwendung ähnelt ArrayList, da die List-Klasse auch die IList-Schnittstelle erbt. Der kritischste Unterschied besteht darin, dass wir beim Deklarieren der List-Sammlung auch den Objekttyp der Daten in der List-Sammlung deklarieren müssen. Zum Beispiel:

object o=123; int i=(int)o;


Wenn wir im obigen Beispiel die Zeichenfolge „Hallo Welt“ in die Listensammlung einfügen, meldet die IDE einen Fehler und die Kompilierung schlägt fehl. Dadurch werden die zuvor erwähnten Typsicherheitsprobleme und Leistungsprobleme beim Ein- und Auspacken vermieden.

Gleichzeitig kann List nicht erstellt werden, Sie können jedoch wie oben einen Verweis auf List erstellen und ListArray erstellen.

Listbd43222e33876353aff11e13a7dc75f6 list = new Listbd43222e33876353aff11e13a7dc75f6();
//新增数据
 list.Add(123);
//修改数据 
list[0] = 345;
//移除数据
list.RemoveAt(0);

List list = new ArrayList(); Dieser Satz erstellt ein ArrayList-Objekt und führt es auf die Liste zurück. Zu diesem Zeitpunkt handelt es sich um ein List-Objekt. Einige ArrayList-Objekte verfügen über Eigenschaften und Methoden, die List nicht hat, sodass sie nicht mehr verwendet werden können. ArrayList list=new ArrayList(); erstellt ein Objekt und behält alle Eigenschaften von ArrayList bei.


Vorteile von List-Generika:

Indem Sie die spezifischen Typen angeben können, mit denen eine generische Klasse oder Methode arbeitet, verlagert die Generika-Funktion die Aufgabe der Typsicherheit von Ihnen auf die Compiler. Es ist nicht erforderlich, Code zu schreiben, um zu erkennen, ob der Datentyp korrekt ist, da der richtige Datentyp zur Kompilierungszeit erzwungen wird. Reduziert die Notwendigkeit von Typumwandlungen und die Möglichkeit von Laufzeitfehlern. Generics bieten Typsicherheit ohne den Aufwand mehrerer Implementierungen.

Dieser Artikel stammt aus der Rubrik

C#.Net-Tutorial

, willkommen zum Lernen!

Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über die Unterschiede zwischen Arrays, Listen und ArrayLists. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen