Wie kann ich in Java eine Klasse mit int Arrayattribut erstellen, sodass abhängig von den Konstruktorargumenten das Array eine individuelle Größe hat?

orochi02  08.04.2022, 10:46

wozu ein array? in den allermeisten fällen sollte man eher nh liste benutzen

KathaHohenfels 
Fragesteller
 08.04.2022, 13:48

in der aufgabenstellung steht ich soll n Array machen und das quasi wie ne Liste implementieren...

2 Antworten

Von Experte Dultus, UserMod Light bestätigt

Arrays mit individueller bzw. dynamischer Größe gibt es nicht in Java.

Nutze stattdessen ArrayList. Diese Klasse übernimmt das "dynamische" Neuerstellen des Arrays im Hintergrund, je nachdem, wie viele Objekte du in diese Liste packst.

Woher ich das weiß:Berufserfahrung – Java-Entwickler von Batch- und Webanwendungen
Dultus, UserMod Light   08.04.2022, 10:38

Dafür liebe ich ja C#'s List :D

1
Dultus, UserMod Light   08.04.2022, 10:45
@orochi02

Kann ich dir nicht beantworten. Ich bin kein Java-Entwickler. Deshalb habe ich auch keine eigene Antwort verfasst, weil Java Eigenheiten hat, die C# nicht hat.

0
ZaoDaDong  08.04.2022, 10:46
@orochi02

Kann ich leider auch nicht sagen, ich habe wenig Ahnung von C#

0
orochi02  08.04.2022, 10:47
@Dultus, UserMod Light

habe mit beidem gearbeitet und ich sehe oberflächlich jz keinen unterschied, deshalb hats mich nur gewundert dass du c# list hochgelobt hast während die antwort von javas arraylist redete, dachte du bevorzugst jz c#s list wegen irnwas coolem was java nicht hat

1
Dultus, UserMod Light   08.04.2022, 10:50
@orochi02

Nö, ich bin von der Antwort ausgegangen, es gäbe keine List, die so funktioniert. Sonst würde ich eine als Alternative vorschlagen.

0
TheQ86  08.04.2022, 10:39

Aber du kannst die Dimensionen trotzdem flexibel einstellen.

Beispiel:

int a[];
int size = 32;
a = new int[size];

Glaube das will die Fragestellerin. Dann kann man nämlich im Konstruktor angeben, wie groß das Array sein soll. Diese Größe ist dann aber natürlich fest.

class Bla {

int a[];

public Bla (int size)
    a = new int[size];
}
1
ZaoDaDong  08.04.2022, 10:41
@TheQ86

Das ginge natürlich, müsste aber in einer Methode gelöst werden. Ich bin davon ausgegangen, es sollte nur als einfaches Attribut gelöst werden.
Hatte auch nicht bedacht, dass das eventuell eine Übungsaufgabe ist.

1
KathaHohenfels 
Fragesteller
 08.04.2022, 13:50

Danke, dann wundert mich die Aufgabenstellung, ich packe sie glaube mal in meine Frage mit rein...

0

Meinst Du so was hier? Aber nicht getestet, sondern so runtergeschrieben.

class MyClass{
     int[] myArray;
     MyClass(int arr_size){
           myArray = new int[arr_size];
     }
     void setNewLength(int arr_size){
           int[] newArray= new int[arr_size];
           int max=arr_size>myArray.length? _
                         myArray.length:arr_size;
           for(int i=0;i<max;++i)
                  newArray[i]=myArray[i];
          myArray=null; // für GC vorher auf null setzen 
          myArray=newArray;
     }
} 
Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich
orochi02  08.04.2022, 10:57

man muss nicht vorher auf null setzen fürs gc, das sind angewohnheiten von alter c programmierung

1
nobytree2  08.04.2022, 11:36
@orochi02

Hast recht, auch ohne Nullsetzung wird der alte Inhalt von myArray nicht mehr erreicht und wird daher von GC eingesammelt.

Bei C und C++ macht man es immer noch so, also nix "alte" Programmierung, und mit C/C++ progt man heute noch. Ist zwar direkter, hat jedoch auch Vorteile, selbst zu deleten/ destructen.

0
orochi02  08.04.2022, 14:13
@KathaHohenfels

garbage collector

kurzgesagt: objekte verbrauchen speicher und der gc schaltet den verbrauchten speicher automatisch wieder frei

1
nobytree2  08.04.2022, 14:14
@KathaHohenfels

Garbage Collector. Das ist ein internes Modul, welches Speicherplatz von Variablen freigibt, welche nicht mehr gebraucht werden. In meiner Methode SetNewLength wird ein neues Array geschaffen und die Variable myArray zeigt dann auf das neue Array. Das alte Array wird nicht mehr gebraucht, darauf zeigt dann weder myArray noch newArray, nichts zeigt mehr darauf, daher kann der Speicherplatz wieder freigegeben werden, das macht der GC.

1
KathaHohenfels 
Fragesteller
 08.04.2022, 13:51

ja genau so meine ich das und so ähnlich habe ich das auch programmiert, aber es wurde nicht angenommen...

0
KathaHohenfels 
Fragesteller
 08.04.2022, 16:47
@nobytree2

von IntelliJ, habe es aber jetzt gelöst und keine Ahnung wie ich das implementiert hatte, dass die Fehlermeldung kam....

0