Array-Problem

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Halli Hallo,
ich hab ein kleines Array Problem:
Ich möchte das bei Unterbrechung das Programs mein Array geleert wird. Also so das er keine Elemente mehr erhält!
Auf null setzen kann ich ihn ja nicht sonst ist er ja nicht mehr aktiv wenn ich ihn später wieder brauche!?

Gibt es eine möglichkeit den Array irgendwie anderst zu leeren oder gibt´s noch andere Lösungen?
 

zd

Bekanntes Mitglied
weiss nicht ob ich dich richtig verstehe, aber du kannst weder die länge des arrays bei laufzeit ändern, noch die elemente mit null initialisieren.

aber du kannst z.B. bei einem int array recht einfach alle werte auf 0 setzen oder ähnliches.

Code:
for (int i = 0; i<array.length; i++) {
      array[i] = 0;
}

falls es mehrdimensional ist einfach verschachtelte for schleifen nehmen.
 
B

bygones

Gast
zd hat gesagt.:
aber du kannst weder die länge des arrays bei laufzeit ändern, noch die elemente mit null initialisieren.
beim ersten stimme ich zu, aber ds zweite ???:L
Wenn du ein Array aus Objekten hast sind die Elemente anfangs immer null und man kann sich während der laufzeit auf null setzen...
???:L
 

zd

Bekanntes Mitglied
deathbyaclown hat gesagt.:
zd hat gesagt.:
aber du kannst weder die länge des arrays bei laufzeit ändern, noch die elemente mit null initialisieren.
beim ersten stimme ich zu, aber ds zweite ???:L
Wenn du ein Array aus Objekten hast sind die Elemente anfangs immer null und man kann sich während der laufzeit auf null setzen...
???:L

ok des kann sein, dann kommts auf den arraytyp an.
aber z.b. ein int array kannst du nicht mit null belegen, auch wenn so vorinitalisiert ist.
das frisst der compiler nicht
Code:
int[] array = new int[3];
array[0] = null;
 
G

Guest

Gast
hmmmm...hab ein String Array!
Also wenn ich folgendes mach:
for (int i = 0; i<array.length; i++) {
array = "";
}

funktionierts zwar das er leer ist, aber in dem SINNE hat er ja immer noch was drin! Nämlich ne Leerzeile :)
Irgendeine Idee dazu??
 

citizen_erased

Bekanntes Mitglied
was ist mit
Code:
= new String();  //   Initializes a newly created String object so that it represents an empty character sequence.
?
 
B

bygones

Gast
wie gesagt, für arrays gibt es zwei möglichkeiten:

Code:
array = null; // kompletter array ist geleert und noch mehr
Code:
for(int i=0; i < array.length; i++) {
array[i] = null;
}
 
G

Guest

Gast
mit:
Code:
array = null;

ist der Array ja nicht nur geleert sondern er existiert dann nicht mehr oder?
Ich hab halt folgendes Problem:
Array soll geleert werden wenn ein bestimmer Button angeklickt wurde!
So, wenn ein anderer Button betägtigt wird dann soll der gleiche Array wieder GELEERT benutzt werden können!! Also wieder ganz normal ab Position 0 die Elmente wieder aufnehmen!
Wie kann ich das denn dann machen wenn ich den Array vorher auf null gesetzt habe??
 
B

bygones

Gast
dann musst du die zweite möglichkeit nehmen...
Kannst du nicht einfach die elemente drin überschreiben ??
 
B

Beni

Gast
Dies setzt jeden Eintrag des Arrays auf null:
Code:
for(int i=0; i < array.length; i++) {
  array[i] = null;
}

Dies setzt die Referenz auf null:
Code:
array = null;

Bei der 1. Variante gilt:
array == null -> false
array == null -> true

Bei der 2. Variante gilt:
array == null -> true
array == null -> NullPointerException

Du benötigst wohl die 1. Variante.

mfg Beni
 
B

bygones

Gast
wobei anzumerken ist, Benis 1.Variante ist meine 2. und andersrum :roll: :wink:
 
B

Beni

Gast
deathbyaclown hat gesagt.:
wobei anzumerken ist, Benis 1.Variante ist meine 2. und andersrum :roll: :wink:
Hm, ok, die Reihenfolge ist schlecht... ich habs auch abgeschrieben... wollte es etwas, hm, "verständlicher" erklären...
:wink:
 

Ytak

Mitglied
Hallo zusammen!

Wollte nur kurz anmerken, dass dies eine ziemlich langsame Lösung darstellt, einen Array zu leeren. Bei grossen Arrays kann dies zu langen Laufzeiten führen und ist unnötig kompliziert. Wenn doch nur alle Elemente des Arrays gelöscht werden müssen (ob object, int, double was auch immer das array für einen typ hat) kann doch einfach eine neue Referenz angelegt werden - ist am einfachsten, ist modular verwendbar (wenn der datentyp geändert wird, bleibt der algorithmus derselbe und die Rechenzeit ist statt O(n) O(1) --> bei 100'000 elementen im Array ist das 0-Setzen dieser 100'000 mal schneller!

In Java würde dies folgendermassen aussehen:
--------------------------------------------------------------------------------------------------------------------
Code:
    int array[] = new int[1000];
    
// array wird mit elementen gefüllt
    for (int i=0; i < array.length; i++) {
     array[i] = 5;
    }
    
    System.out.println(array[10]); // out: 5
    
//alle elemente des Arrays löschen --> wir erzeugen einfach eine neue Referenz für dieses Array. Der GarbageCollector von Java wird das alte array-Object(gefüllt mit 5-Werten) nach kurzer Zeit aus dem Speicher entfernen und die Referenz wird einfach auf das neue Array gelegt:
    
    array = new int[1000];
    System.out.println(array[10]); // out: 0   , weil int-arrays bei der Initialisierung immer gefüllt mit 0-Werten
    
    
// that's all folkz! :-)
// Das ganze ginge jetzt natürlich auch mit Object-Arrays (String, Integer, Double etc.)
// z.b.  Object array[] = new Object[5];
// test[0] = new String("Hallo");
// System.out.println(test[0]);  // out: Hallo
--------------------------------------------------------------------------------------------------------------------

Grüsse
 
G

Guest

Gast
Ytak hat gesagt.:
. Wenn doch nur alle Elemente des Arrays gelöscht werden müssen (ob object, int, double was auch immer das array für einen typ hat) kann doch einfach eine neue Referenz angelegt werden - ist am einfachsten, ist modular verwendbar (wenn der datentyp geändert wird, bleibt der algorithmus derselbe und die Rechenzeit ist statt O(n) O(1) --> bei 100'000 elementen im Array ist das 0-Setzen dieser 100'000 mal schneller!

Halt ich für ein Gerücht.

Code:
    System.out.println(array[10]); // out: 0   , weil int-arrays bei der Initialisierung immer gefüllt mit 0-Werten

Aha. Und diese automatische Initialisierung mit 0-Werten braucht also keine Zeit?
Das wird ebenfalls eine Komplexität von O(n) haben. Ganz sicher sogar.
 
G

Guest

Gast
Aha. Und diese automatische Initialisierung mit 0-Werten braucht also keine Zeit?
Das wird ebenfalls eine Komplexität von O(n) haben. Ganz sicher sogar.

Och...bei der Initialisierung einer Variable als auch eines neuen Array-Objects wird im Hauptspeicher, für die zu speichernden Elemente in diesem Array, ein definierter Platz eingeräumt (weil arrays während der Laufzeit weder ihre Grösse, noch ihren Datentyp ändern können). Wenn nun an keinem Index des Arrays bisher ein Object bzw. ein "Wert" abgelegt wurde, dann ist an jeder Stelle im alloziierten Array halt einfach auch nichts da. Nichts bedeutet im Sinne von ADTs "null", bei integrierten Typen wie "int" oder "double" ist dies "0". Ein Object in den Speicher legen bzw. ein neues Object alloziierenhat eine O-Notation von 1 ( O(1) ) da hier weder eine Schleife, noch irgendwelche Verschachtelungen (grosse Konstanten) zum Tragen kommen.

Bei ausgeklügelten Algorithmen wird sehr darauf geachtet, dass die Laufzeit niedrig gehalten werden kann. Eine traversierung des ganzen Arrays bedeutet IMMER O(n) - also eine Laufzeit abhängig von n-Elementen im array. Dies ist der schlechteste Zustand eines Algorithmus. Wenn man das einfach vermeiden kann (die JVM hat ja zum Glück einen voll automatischen GarbageCollector - man muss demnach das null-referenzierte Object nicht manuell aus dem Speicher entfernen) dann sollte man auch wo immer möglich. Zudem ist die neu-allokation des selben Objects der einfachste Weg in der Programmierung. FOR-Schleife = 3 Zeilen Code, Allokation = 1 Zeile code und zudem ist die FOR-Schleife anfälliger. Sollte der Typ des Arrays während der Programmierung mal verändert werden (bsp. anstelle von Int-Werten soll das Array nun Integer-Objects aufnehmen) dann ist u.Umständen eine aufwändige Programmänderung notwendig; die allokation ist für alle Object-Type gleich, der typ kann global definiert werden (in einer Basisklasse oder sogar in einem Interface)

Fact ist: Für ein kleines Java-Programm ist's scheissegal ob man ein neues Object alloziiert oder eine For-Schleife programmiert; aber warum denn nicht von anfang an den einfachsten Weg suchen?

Greetz[/quote]
 
D

DrZoidberg

Gast
Anonymous hat gesagt.:
Aha. Und diese automatische Initialisierung mit 0-Werten braucht also keine Zeit?
Das wird ebenfalls eine Komplexität von O(n) haben. Ganz sicher sogar.

Och...bei der Initialisierung einer Variable als auch eines neuen Array-Objects wird im Hauptspeicher, für die zu speichernden Elemente in diesem Array, ein definierter Platz eingeräumt (weil arrays während der Laufzeit weder ihre Grösse, noch ihren Datentyp ändern können). Wenn nun an keinem Index des Arrays bisher ein Object bzw. ein "Wert" abgelegt wurde, dann ist an jeder Stelle im alloziierten Array halt einfach auch nichts da. Nichts bedeutet im Sinne von ADTs "null", bei integrierten Typen wie "int" oder "double" ist dies "0". Ein Object in den Speicher legen bzw. ein neues Object alloziierenhat eine O-Notation von 1 ( O(1) ) da hier weder eine Schleife, noch irgendwelche Verschachtelungen (grosse Konstanten) zum Tragen kommen.

Dieses "Nichts" ist aber nicht automatisch da. Die Nullen müssen erst noch in den Speicher geschrieben werden. Das macht die Java VM, wenn das Array initialisiert wird. Und dieses Schreiben der Nullen hat natürlich die Komplexität O(n) und nicht O(1). In C++ sähe das anders aus. Dort würde das Array nicht automatisch mit Nullen gefüllt werden, sondern es wird lediglich der Speicher reserviert, der dann natürlich zufällige Werte enthält. Da hat man dann tatsächlich O(1).

Abgesehen davon ist das Erstellen eines neuen Arrays aber keine schlechte Idee.
 

Ytak

Mitglied
Hallo!
Du hast recht, ich habe das ganze mal gecoded und ausprobiert - tatsächlich reserviert die VM nicht nur den Speicher sondern füllt gleichzeitig das ganze Array mit 0-Werten (bzw. null)

Dies erklärt auch, warum die Laufzeit bei der Neu-Allokation sogar etwas langsamer ist als die Initialisierung des bestehenden Arrays mit 0-Werten. Habe ich mich tatsächlich getäuscht... aber... aus Fehlern lernt man ;-)

Code:
package testproject;

public class test {
  public static void main(String[] args) {
    long start1, start2, start3, end1, end2, end3;

    start1 = System.currentTimeMillis();
    long array1[] = new long[10];
    end1 = System.currentTimeMillis();
    
    start2 = System.currentTimeMillis();
    long array2[] = new long[999999];
    end2 = System.currentTimeMillis();
    
    start3 = System.currentTimeMillis();
    for (int i=0; i < array2.length; i++) {
      array2[i] = 1;
    }
    end3 = System.currentTimeMillis();
    
    System.out.println("Array1: " +(end1 - start1) + " Array2: " +(end2 - start2) +" Array3: " +(end3 - start3));
  }
}

Code:
out:  Array1: 0 Array2: 30 Array3: 20

Grüsse und thx für die Info - ich werde das mal meinem Lehrer weitergeben gucken ob er das weiss :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
A Array problem Java Basics - Anfänger-Themen 16
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
B Array Problem Java Basics - Anfänger-Themen 3
F Problem mit der Aufgabe(Array) Java Basics - Anfänger-Themen 21
H boolean Array Problem Java Basics - Anfänger-Themen 7
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
L Array-Problem/Zufallszahlen Java Basics - Anfänger-Themen 7
G Problem mit Array Java Basics - Anfänger-Themen 2
K Problem mit Methode(Array,Boolean,ForSchleife) Java Basics - Anfänger-Themen 6
C Problem mit Arrays im Array Java Basics - Anfänger-Themen 11
A Problem mit Array Ausgabe Java Basics - Anfänger-Themen 7
L 2 dimensionales Array, Problem der Ausgabe Java Basics - Anfänger-Themen 4
E Array Problem Java Basics - Anfänger-Themen 1
L Problem mit Array Programm Java Basics - Anfänger-Themen 2
M Array problem Java Basics - Anfänger-Themen 9
M If und Array-Problem Java Basics - Anfänger-Themen 6
P OOP Array-Problem Java Basics - Anfänger-Themen 5
S Problem mit Array.Length Java Basics - Anfänger-Themen 2
R Array Problem Java Basics - Anfänger-Themen 17
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
P Array queue problem Java Basics - Anfänger-Themen 1
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
F Problem mit Array Java Basics - Anfänger-Themen 8
N OOP Problem mit Array Java Basics - Anfänger-Themen 17
M Problem mit 2D Array Java Basics - Anfänger-Themen 3
M Problem mit Array und replace Java Basics - Anfänger-Themen 3
D Array Problem Java Basics - Anfänger-Themen 4
F Array Problem !? Java Basics - Anfänger-Themen 6
M Erste Schritte Array Problem Java Basics - Anfänger-Themen 8
F Problem mit Array, Java Basics - Anfänger-Themen 4
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
B Problem mit Array Java Basics - Anfänger-Themen 5
J Array Problem Java Basics - Anfänger-Themen 2
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
D Klassen Problem mit Eigener Array-Klasse Java Basics - Anfänger-Themen 10
N Array problem bei einem magischen Quadrats Java Basics - Anfänger-Themen 3
P Klassen Klassen mit Array Problem Java Basics - Anfänger-Themen 4
T Problem mit Array Konvertierung Java Basics - Anfänger-Themen 13
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
L Array Problem NullPointerException Java Basics - Anfänger-Themen 3
K Problem: Array String to Integer Java Basics - Anfänger-Themen 2
M Char-Array Problem Java Basics - Anfänger-Themen 6
D Problem mit TextFeld Array Java Basics - Anfänger-Themen 18
A Array Zugriff- Problem Java Basics - Anfänger-Themen 5
V 2D - Objekt Array Problem Java Basics - Anfänger-Themen 3
K Java Array Problem Java Basics - Anfänger-Themen 3
L Problem mit Array Java Basics - Anfänger-Themen 3
K kleines Array-Problem Java Basics - Anfänger-Themen 6
X Array out of bounds problem Java Basics - Anfänger-Themen 7
M Array Problem Java Basics - Anfänger-Themen 2
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
E Array Problem... Java Basics - Anfänger-Themen 14
P array problem Java Basics - Anfänger-Themen 9
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6
F Array Problem bei ByteburgTarif Java Basics - Anfänger-Themen 2
P Problem mit Laden und Ausgeben eines array-Objekts Java Basics - Anfänger-Themen 4
A Problem mit einem Array aus JButtons Java Basics - Anfänger-Themen 4
D Array multiplikations Problem Java Basics - Anfänger-Themen 26
D Array Problem Java Basics - Anfänger-Themen 5
B Mehrdimensionale Array Problem Java Basics - Anfänger-Themen 12
T Array-Vector Problem Java Basics - Anfänger-Themen 18
T Blutiger Anfänger mit Array Problem Java Basics - Anfänger-Themen 8
T problem mit array Java Basics - Anfänger-Themen 9
S String split array.length Problem Java Basics - Anfänger-Themen 3
B Problem mit Object Array Java Basics - Anfänger-Themen 8
W Problem mit BubbleSort und Array Java Basics - Anfänger-Themen 10
G Problem mit der Rückgabe von einem Array Java Basics - Anfänger-Themen 3
G Array-Problem Java Basics - Anfänger-Themen 3
M sinus berechnen array problem Java Basics - Anfänger-Themen 2
C array problem Java Basics - Anfänger-Themen 7
G Array ,Matrix Problem Java Basics - Anfänger-Themen 20
Antoras Problem mit Array Java Basics - Anfänger-Themen 5
K Problem mit 2 Dimensionalen Array Java Basics - Anfänger-Themen 4
D Array reverse Problem, da Referenz nicht auf tmpArray zeigt Java Basics - Anfänger-Themen 4
G Kleines Problem mit Array Java Basics - Anfänger-Themen 14
0 Array problem Java Basics - Anfänger-Themen 4
S Problem mit Array-Erstellung Java Basics - Anfänger-Themen 5
A array problem Java Basics - Anfänger-Themen 4
G array Problem Java Basics - Anfänger-Themen 9
H Problem mit array Java Basics - Anfänger-Themen 5
zilti Array-Problem Java Basics - Anfänger-Themen 6
J Array - Vertauschen Problem mit char/int Java Basics - Anfänger-Themen 6
M Problem mit Array in Methodenkopf Java Basics - Anfänger-Themen 2
K problem beim schreiben in ein int-array Java Basics - Anfänger-Themen 9
S JTable Problem mit einzufügendem Array Java Basics - Anfänger-Themen 6
D Problem mit Array brauche schnell Hilfe Java Basics - Anfänger-Themen 11
R Problem mit AbstractTableModel oder Array! Java Basics - Anfänger-Themen 5
G Problem mit Array bei einem 4-Gewinnt Spiel Java Basics - Anfänger-Themen 2
K problem mit resultset und 2d-array Java Basics - Anfänger-Themen 3
G Problem mit array Java Basics - Anfänger-Themen 2
P Array-Problem Java Basics - Anfänger-Themen 4
L Array Problem Java Basics - Anfänger-Themen 9
B Array Manipulation Problem Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben