Array: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (mal korrigiert, wie es mir in den Sinn kam)
K
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Ein Array ist ein Konstrukt in dem mehrere [[Objekt]]e eines [[Datentyp]]s hintereinander aufgereiht stehen. (Es wird hier immer von Objekten geredet egal ob es in der [[Programmiersprache]] Objekte gibt oder nicht)
+
Ein Array ist ein Konstrukt, in dem mehrere [[Objekt|Objekte]] eines [[Datentyp|Datentyps]] hintereinander aufgereiht stehen. (Es wird hier immer von Objekten geredet, egal ob es in der [[Programmiersprache]] Objekte gibt oder nicht)
Diese Konstrukte werden oft verwendet, wenn man eine große Ansammlung von gleichen Daten eines Objekts hat. Durch die Verwendung von Arrays muss man nicht viele Variablen anlegen und hat so alles übersichtlicher. In den meisten Sprachen haben Arrays jedoch den Nachteil, dass sie statisch sind, d.h. man legt einmal ihre Größe fest und danach kann man diese nicht mehr ändern. Will man mehr Objekte ablegen, muss man ein neues Array anlegen. Daher haben Arrays in diesen Sprachen aber auch einen Vorteil gegenüber den dynamischen Strukturen wie Listen: Da sie eine fest definierte Größe haben kann man sie über einen Index anlegen und darauf zugreifen. Dies ist meistens eine schnellere Möglichkeit, als es bei anderen Strukturen möglich ist.
 
  
Für die Erzeugung von Arrays gibt es unterschiedliche Wege, jedoch haben sie meistens gemeinsam, dass eckige Klammern([]) ein Array symbolisieren. So wird in [[C]] und [[C++]] ein Array mit <code>typ name[];</code> deklariert und die Initialisierung kann auf zwei unterschiedliche Wege erfolgen, <code> name = typ[anzahl]</code> oder <code>name = malloc(sizeof(typ)*anzahl)</code>, bzw. <code>name = new typ[anzahl]</code>. Der Unterschied zwischen den beiden Arten ist, dass bei der ersten Möglichkeit der Speicher vom Compiler festgelegt wird und so nicht mehr freigegeben werden muss und bei der zweiten Art zur Laufzeit angelegt wird, welchen man dann auch selbst freigeben muss. Will man in C# oder Java ein Array anlegen, geschieht dies mit <code>typ[] name;</code> und die Initialisierung erfolgt über <code>name = new typ[anzahl]()</code>. In Java ist es auch möglich die Arrays wie in C++ anzulegen.  
+
Diese Konstrukte werden oft verwendet, wenn man eine fixe Anzahl von Daten eines bestimmten Objekts verarbeiten will. Durch die Verwendung von Arrays muss man nicht viele Variablen anlegen und hat so alles übersichtlicher. In den meisten Sprachen haben Arrays jedoch den Nachteil, dass sie statisch sind, d.h. man legt einmal ihre Größe fest und danach kann man diese nicht mehr ändern. Will man mehr Objekte ablegen, muss man ein neues Array anlegen. Daher haben Arrays in diesen Sprachen aber auch einen Vorteil gegenüber den dynamischen Strukturen wie Listen: Da sie eine fest definierte Größe haben kann man sie über einen Index anlegen und darauf zugreifen. Dies ist meistens eine schnellere Möglichkeit, als es bei anderen Strukturen möglich ist.  
  
Bei der Sprache [[C#]] wurde noch ein weiterer Arraytyp eingeführt. Hier sind in jeder Zeile immer gleich viele Objekte, diese werden mit <code>typ[,] name = new typ[anzahl,anzahl]();</code> angelegt. In allen anderen Sprachen lassen sich Arrays auch mit mehreren Dimensionen anlegen, hierzu muss nur ein weiteres Klammerpaar hinzugefügt werden. Diese neuen Arrays in dem bestehenden Array müssen auch nicht gleich initialisiert werden sondern können auch erst später angelegt werden um so besser auf die Gegebenheiten angepasst zu sein. Daher ist es möglich das eine Zeile mal 4 Objekte enhält und eine mal gar keine, dies muss dann im Programm alles gesondert behandelt werden.
+
Für die Erzeugung von Arrays gibt es unterschiedliche Wege, jedoch haben sie meistens gemeinsam, dass eckige Klammern ('''[]''') ein Array symbolisieren. So wird in [[C]]/[[C++]] und Java ein Array mit
 +
<syntaxhighlight lang="c">typ name[];</syntaxhighlight>
 +
deklariert und die Initialisierung kann auf zwei unterschiedliche Wege erfolgen,
 +
<syntaxhighlight lang="c">name = typ[anzahl];</syntaxhighlight>
 +
oder explizit in C/C++
 +
<syntaxhighlight lang="c">name = malloc(sizeof(typ)*anzahl);</syntaxhighlight>
 +
bzw.
 +
<syntaxhighlight lang="c">name = new typ[anzahl];</syntaxhighlight>
 +
Der Unterschied zwischen den beiden Arten ist, dass bei der ersten Möglichkeit der Speicher vom Compiler festgelegt wird und so nicht mehr freigegeben werden muss und bei der zweiten Art zur Laufzeit angelegt wird, welchen man dann auch selbst freigeben muss. Will man in C# oder Java ein Array anlegen, geschieht dies mit
 +
<syntaxhighlight lang="csharp">typ[] name;</syntaxhighlight>
 +
und die Initialisierung erfolgt über
 +
<syntaxhighlight lang="csharp">name = new typ[anzahl]();</syntaxhighlight>
 +
In [[PHP]] gibt es Arrays mit und ohne Schlüssel Ein Array mit Schlüssel (assoziatives Array) ist entfernt mit Typen von [[Collections_(Java)#Map|java.util.Map]] aus Java vergleichbar, also Schlüssel-Wert-Paaren.
 +
<syntaxhighlight lang="php">$array = array[0 => "Byte", 1 => "-", 2 => "Welt", 3 => "!!!"];</syntaxhighlight>
 +
Bei PHP darf der Schlüssel ein int oder ein String sein, bei Java können beliebige Objekt-Typen als Schlüssel verwendet werden.<br>
 +
Hier noch ein Array ohne Schlüssel in PHP:
 +
<syntaxhighlight lang="php">$array = array["Hallo", "Byte", "-", "Welt", "!!!"];</syntaxhighlight>
 +
Seit PHP 5.4 sind auch eckige Klammern erlaubt.
 +
 
 +
Bei der Sprache [[C#]] wurde noch ein mehrdimensionaler Array-Typ eingeführt. Hier sind in jeder Zeile immer gleich viele Objekte, diese werden mit
 +
<syntaxhighlight lang="csharp">typ[,] name = new typ[zeilen,spalten]();</syntaxhighlight>
 +
angelegt.  
 +
 
 +
In allen anderen Sprachen lassen sich Arrays auch mit mehreren Dimensionen anlegen. Hierzu muss nur ein weiteres Klammerpaar hinzugefügt werden.  
 +
<syntaxhighlight lang="java">typ[][] name = new typ[zeilen][spalten]();</syntaxhighlight>
 +
Diese neuen Arrays in dem bestehenden Array müssen auch nicht gleich initialisiert werden sondern können auch erst später angelegt werden um so besser auf die Gegebenheiten angepasst zu sein. Daher ist es möglich das eine Zeile mal 4 Objekte enthält und eine mal gar keine, dies muss dann im Programm alles gesondert behandelt werden.
  
 
Neben der Möglichkeit des Anlegens von leeren Arrays gibt es auch Möglichkeit Arrays gleich mit vorhandenen Daten anzulegen. In den meisten Sprachen ist dies einfach möglich indem man nach der normalen Syntax für die Initialisierung des Arrays gleich in geschweiften Klammern die Objekte durch Kommas getrennt einfügt, z.B. in [[Java]]:
 
Neben der Möglichkeit des Anlegens von leeren Arrays gibt es auch Möglichkeit Arrays gleich mit vorhandenen Daten anzulegen. In den meisten Sprachen ist dies einfach möglich indem man nach der normalen Syntax für die Initialisierung des Arrays gleich in geschweiften Klammern die Objekte durch Kommas getrennt einfügt, z.B. in [[Java]]:
<code=java>
+
<syntaxhighlight lang="java">
String s = new String[]{"Hallo"," ","Hallo","!!!"};
+
String s = new String[]{"Hallo", "Byte", "-", "Welt", "!!!"};
</code=java>
+
</syntaxhighlight>
 
In einigen Sprachen ist es auch möglich bei der Deklaration der Variablen gleich die Werte zuzuweisen ohne die übliche Initialisierungssyntax, z.B. in Java:
 
In einigen Sprachen ist es auch möglich bei der Deklaration der Variablen gleich die Werte zuzuweisen ohne die übliche Initialisierungssyntax, z.B. in Java:
<code=java>
+
<syntaxhighlight lang="java">
String[] s = {"Hallo"," ","Hallo","!!!"};
+
String[] s = {"Hallo", "Byte", "-", "Welt", "!!!"};
</code=java>
+
</syntaxhighlight>
  
  
 
[[Kategorie:Programmierung]]
 
[[Kategorie:Programmierung]]
 
[[Kategorie:Programmierung Grundlagen]]
 
[[Kategorie:Programmierung Grundlagen]]

Aktuelle Version vom 23. Oktober 2018, 12:10 Uhr

Ein Array ist ein Konstrukt, in dem mehrere Objekte eines Datentyps hintereinander aufgereiht stehen. (Es wird hier immer von Objekten geredet, egal ob es in der Programmiersprache Objekte gibt oder nicht)

Diese Konstrukte werden oft verwendet, wenn man eine fixe Anzahl von Daten eines bestimmten Objekts verarbeiten will. Durch die Verwendung von Arrays muss man nicht viele Variablen anlegen und hat so alles übersichtlicher. In den meisten Sprachen haben Arrays jedoch den Nachteil, dass sie statisch sind, d.h. man legt einmal ihre Größe fest und danach kann man diese nicht mehr ändern. Will man mehr Objekte ablegen, muss man ein neues Array anlegen. Daher haben Arrays in diesen Sprachen aber auch einen Vorteil gegenüber den dynamischen Strukturen wie Listen: Da sie eine fest definierte Größe haben kann man sie über einen Index anlegen und darauf zugreifen. Dies ist meistens eine schnellere Möglichkeit, als es bei anderen Strukturen möglich ist.

Für die Erzeugung von Arrays gibt es unterschiedliche Wege, jedoch haben sie meistens gemeinsam, dass eckige Klammern ([]) ein Array symbolisieren. So wird in C/C++ und Java ein Array mit

typ name[];

deklariert und die Initialisierung kann auf zwei unterschiedliche Wege erfolgen,

name = typ[anzahl];

oder explizit in C/C++

name = malloc(sizeof(typ)*anzahl);

bzw.

name = new typ[anzahl];

Der Unterschied zwischen den beiden Arten ist, dass bei der ersten Möglichkeit der Speicher vom Compiler festgelegt wird und so nicht mehr freigegeben werden muss und bei der zweiten Art zur Laufzeit angelegt wird, welchen man dann auch selbst freigeben muss. Will man in C# oder Java ein Array anlegen, geschieht dies mit

typ[] name;

und die Initialisierung erfolgt über

name = new typ[anzahl]();

In PHP gibt es Arrays mit und ohne Schlüssel Ein Array mit Schlüssel (assoziatives Array) ist entfernt mit Typen von java.util.Map aus Java vergleichbar, also Schlüssel-Wert-Paaren.

$array = array[0 => "Byte", 1 => "-", 2 => "Welt", 3 => "!!!"];

Bei PHP darf der Schlüssel ein int oder ein String sein, bei Java können beliebige Objekt-Typen als Schlüssel verwendet werden.
Hier noch ein Array ohne Schlüssel in PHP:

$array = array["Hallo", "Byte", "-", "Welt", "!!!"];

Seit PHP 5.4 sind auch eckige Klammern erlaubt.

Bei der Sprache C# wurde noch ein mehrdimensionaler Array-Typ eingeführt. Hier sind in jeder Zeile immer gleich viele Objekte, diese werden mit

typ[,] name = new typ[zeilen,spalten]();

angelegt.

In allen anderen Sprachen lassen sich Arrays auch mit mehreren Dimensionen anlegen. Hierzu muss nur ein weiteres Klammerpaar hinzugefügt werden.

typ[][] name = new typ[zeilen][spalten]();

Diese neuen Arrays in dem bestehenden Array müssen auch nicht gleich initialisiert werden sondern können auch erst später angelegt werden um so besser auf die Gegebenheiten angepasst zu sein. Daher ist es möglich das eine Zeile mal 4 Objekte enthält und eine mal gar keine, dies muss dann im Programm alles gesondert behandelt werden.

Neben der Möglichkeit des Anlegens von leeren Arrays gibt es auch Möglichkeit Arrays gleich mit vorhandenen Daten anzulegen. In den meisten Sprachen ist dies einfach möglich indem man nach der normalen Syntax für die Initialisierung des Arrays gleich in geschweiften Klammern die Objekte durch Kommas getrennt einfügt, z.B. in Java:

String s = new String[]{"Hallo", "Byte", "-", "Welt", "!!!"};

In einigen Sprachen ist es auch möglich bei der Deklaration der Variablen gleich die Werte zuzuweisen ohne die übliche Initialisierungssyntax, z.B. in Java:

String[] s = {"Hallo", "Byte", "-", "Welt", "!!!"};