Thomas Hartmut: 2 Fragen zu Arrays

Moin,

ist es möglich ein Array auch so zu deklarieren, dass man vorher nicht weiß wieviele Elemente genau enthalten sein werden? Ich möchte ein dynamisches Programm erstellen, bei dem ich eben vorher nicht weiß wieviele Elemente während der Laufzeit ins Array geschrieben werden. Geht sowas in Java nicht?
Und gibt es für Java auch sowas wie einen implode() Befehl für Arrays oder muss man sich das selbst basteln?

Gruß, Thomas

  1. Hallo,

    ein dynamisches Array legst du so an:

    int[] dynarray = new int[n];

    Das funktioniert natürlich mit jedem beliebigen Datentyp. n ist hierbei die Anzahl der Elemente.

    Mit freudlichen Grüßen, NaeZnaL

    1. Aber wenn ich für n 5 gebe, heißt das ja, dass in dem Array maximal 5 Elemente Platz finden, oder? Ich weiß aber vorher nicht obs 5 oder 10 oder 30 werden und einfach auf 1000 oder so setzen erscheint mir irgendwie unprofessionell.
      Oder habe ich jetzt was missverstanden?

      1. Hallo,

        dann musst du ein neues, größeres Array anlegen, die Daten kopieren und das alte Array wieder löschen. Und das dann jedesmal wenn der Platz nicht mehr reicht.

        Mit freudlichen Grüßen, NaeZnaL

        1. Irgendwie erscheint mir das sehr umständlich. Ich fange gerade erst mit Java an, habe bis jetzt eher immer PHP und so verwendet, da ist das irgendwie viel einfacher.
          Wozu wird das in Java so gemacht. Um den Speicherverbrauch minimal zu halten? Um die Programme möglichst schnell ablaufen zu lassen?

          1. Hallo,

            PHP ist ja auch eine Scriptsprache. Der Interpreter übernimmt dann die meiste Arbeit. Intern wird da genau das gleiche gemacht. Java hingegen ist eine Programmiersprache, welche in selbstständigen Code umgewandelt wird. da musst du es entweder selber Programmieren oder du benutzt eine fertige Klasse.

            Mit freudlichen Grüßen, NaeZnaL

        2. Hallo,

          dann musst du ein neues, größeres Array anlegen, die Daten kopieren und das alte Array wieder löschen. Und das dann jedesmal wenn der Platz nicht mehr reicht.

          Nein.

          Gruß
          Slyh

          1. Warum, stimmt doch eigentlich, oder? Sonst bekommt man doch eine ArrayOutOfBounds Exception oder so.

            1. Hallo,

              Warum, stimmt doch eigentlich, oder? Sonst bekommt man doch eine ArrayOutOfBounds Exception oder so.

              Hast du meine andere Antwort gelesen?

              Natürlich muß man ein Array umkopieren, wenn das alte zu klein geworden
              ist. Aber damit du genau das nicht mehr tun mußt, bietet Java dir die
              von mir genannten Klassen an. Intern wird da auch nichts anderes als
              ein Array angelegt, das -- sobald es nicht mehr groß genug ist -- durch
              ein doppelt so großes ersetzt wird, in das die alten Daten umkopiert
              werden.

              Ich bezweifle einfach, daß du dir eine eigene Klasse schreiben möchtest,
              wenn dir mehr als genug bestehende (und vor allem nachweislich funktionierende)
              Klassen bereits zur Verfügung stehen.

              Gruß
              Slyh

  2. Hallo,

    ist es möglich ein Array auch so zu deklarieren, dass man vorher nicht weiß wieviele Elemente genau enthalten sein werden? Ich möchte ein dynamisches Programm erstellen, bei dem ich eben vorher nicht weiß wieviele Elemente während der Laufzeit ins Array geschrieben werden. Geht sowas in Java nicht?

    Ja. Sowas nennt sich üblicherweise Vector oder dynamisches Array.

    In Java kannst z.B. java.util.Vector oder java.util.ArrayList verwenden.
    (Genaugenommen sollte jede konkrete Klasse, die java.util.List
    implementiert, dieses Verhalten haben, muß aber nicht.)

    Und gibt es für Java auch sowas wie einen implode() Befehl für Arrays oder muss man sich das selbst basteln?

    Wenn dir die Ausgabe der toString()-Methode nicht reicht, dann mußt
    du ihn dir wohl selbst basteln.

    Gruß
    Slyh