Array/Liste ohne Obergrenze

Hijo2006

Aktives Mitglied
Hallo

ich habe eine zu Beginn des Programms unbekannte Anzahl an Werten, die ich
dann gerne in ein Array oder eine Liste speichern mag, um dann jeweils den Min/Max-Wert zu bestimmen.

Danke
 

Nuiton

Bekanntes Mitglied
Sortieren wie z.B. mit folgender Zeile vor der Ausgabe:
Java:
Arrays.sort(array);
 

Hijo2006

Aktives Mitglied
ich lese aus einer datei werte ein, deren Umfang vorher nicht bekannt ist.
Diese will ich dann analysieren auf Min/Max und evt Summen.
Aber vielleicht mach ich es anders und bewerte Zeilenweise
beim Einlesen Min/Max
 

Flown

Administrator
Mitarbeiter
Brauchst du die ursprünglichen Daten die du ausgelesen hast? Oder eben nur die Extremwerte und/oder Summe?
 

Hijo2006

Aktives Mitglied
ich brauche nur die finalen Werte wie Min/Max und ggf. die Summe.
Klar- ich kann beim Einlesen jeweils Min/Max neu bewerten, dachte nur,
dass es evt. eine Varinate gibt, alles in eine Liste/Array o.ä. zu schieben
und mit einer Methode .Max oder .Min analog wie Math.Min oder Math.Max
die Daten abzugreifen.
Es geht mir nur drum, dass es am schnellsten geht. bzw ich wieder was neues
lerne
Eine machbare Variante habe ich schon :D
 

Flown

Administrator
Mitarbeiter
Sobald du eine Zeile einliest sofort die Werte berechnen. Das ist am Speichereffizientesten und Laufzeittechnisch gesehen auch am schnellsten.
Erst in eine Liste einlesen und dann sortieren ist gerade nicht langsam, aber auch nicht flott und verbraucht unnötigen Speicherplatz.
 
X

Xyz1

Gast
@ TO : Nicht, wenn du das nicht selber machen willst. Ich mache das ja liebend gerne selber. Ja, Arrays habn eine feste Größe, andere, Listen, sind dynamisch. Allerdings könntest du bei Arrays Speicherplatz-Overhead einsparen. Ich bereite mal ein Beispiel vor...
 
X

Xyz1

Gast
So könntest du anfangen (nicht besonders super, aber es geht):
Java:
package javaapplication;

import java.util.Arrays;
import java.util.Random;

public class Temp {

    private static int[] array = new int[0];
    private static int min = 0;
    private static int max = 0;
    private static long sum = 0;

    public static void main(String[] args) {
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            add(random.nextInt(15) - 5);
        }

        System.out.println(Arrays.toString(array));
        System.out.println("min = " + min);
        System.out.println("max = " + max);
        System.out.println("sum = " + sum);
        System.out.println("avr = " + (double) sum / array.length);
    }

    private static void add(int i) {
        int[] neu = new int[array.length + 1];
        System.arraycopy(array, 0, neu, 0, array.length);
        neu[neu.length - 1] = i;

        if (i < min) {
            min = i;
        }
        if (i > max) {
            max = i;
        }
        sum += i;

        array = neu;
    }
}

Code:
[7, -3, 1, -5, 9, 5, 7, 4, -3, -2]
min = -5
max = 9
sum = 20
avr = 2.0

Ich teste das mal mit höherer Schleife und Laufzeit,
Java:
    public static void main(String[] args) {
        Random random = new Random();
        long t1 = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            add(random.nextInt(15) - 5);
        }
        long t2 = System.currentTimeMillis();

        // System.out.println(Arrays.toString(array));
        System.out.println("min = " + min);
        System.out.println("max = " + max);
        System.out.println("sum = " + sum);
        System.out.println("avr = " + (double) sum / array.length);
        System.out.println(t2 - t1);
    }

Dauert alleine schon 4 Sekunden, aber dann hat die CPU was zu tun.

Warum dauert das so lange? Naja, das liegt auf der Hand. Das Vergrößerungs-Verhalten. Ein besseres brauchen wir jetzt Mathematik. Du kannst das ja mal mit ArrayList vergleichen, welche auch ein wenig Speicherplatz-Overhead inne hat.
 
X

Xyz1

Gast
Arrays (richtig "gemacht"): schnell, fix
Listen: langsam, dynamisch
Stimmt ihr mir da wenigstens zu?

Übrigens... Die Laufzeit oben müsste (n*n) sein (oder ist es sogar mehr? oder ist es sogar n*n*n?) + reichlich Overhead und Verwaltungsaufwand (wirklich schlimm), damit der Speicher nicht unendlich wird, muss der GC jedes Mal ran.
 

mrBrown

Super-Moderator
Mitarbeiter
Arrays (richtig "gemacht"): schnell, fix
Listen: langsam, dynamisch
Stimmt ihr mir da wenigstens zu?
Ja und Nein. Listen können intern auch nur Arrays sein.
Array und Liste (richtig "gemacht"): schnell
Array und Liste (falsch "gemacht"): langsam

Übrigens... Die Laufzeit oben müsste (n*n) sein (oder ist es sogar mehr? oder ist es sogar n*n*n?)
Müsste O(n^2) sein, wo soll denn das dritte *n herkommen?


damit der Speicher nicht unendlich wird, muss der GC jedes Mal ran.
Jedes Mal muss er da keineswegs ran ;) Außerdem dürfte der recht schnell sein (wenn ich grad den richtigen GC im Kopf hab), gibt ja kaum Objekte, die überleben, das meiste ist ja Garbage..
 
X

Xyz1

Gast
ich brauche nur die finalen Werte wie Min/Max und ggf. die Summe.
Klar- ich kann beim Einlesen jeweils Min/Max neu bewerten, dachte nur,
dass es evt. eine Varinate gibt, alles in eine Liste/Array o.ä. zu schieben
und mit einer Methode .Max oder .Min analog wie Math.Min oder Math.Max
die Daten abzugreifen.
Es geht mir nur drum, dass es am schnellsten geht. bzw ich wieder was neues
lerne
Eine machbare Variante habe ich schon :D

In der Standard Api nicht, nein. Aber wie gesagt, es wurde eine Lib vorgeschlagen. Oder selber machen und nicht das von mir heranziehen...

@mrBrown: Arrays können niemals langsam sein. :D Es kommt immer darauf an, was man mit anstellen möchte. Listen hingegen sind erst mal langsam, da eine Methode aufgerufen werden muss. Aber langsam ist hier seeehr relativ.

Na-ja, heute keine Lust auf Streitigkeiten.
 

mrBrown

Super-Moderator
Mitarbeiter
In der Standard Api nicht, nein. Aber wie gesagt, es wurde eine Lib vorgeschlagen. Oder selber machen und nicht das von mir heranziehen...

Files.lines, #mapToInt und #summaryStatistics sind Standard-API (java.util und java.nio) und keine externe Lib^^

@mrBrown: Arrays können niemals langsam sein. :D Es kommt immer darauf an, was man mit anstellen möchte. Listen hingegen sind erst mal langsam, da eine Methode aufgerufen werden muss. Aber langsam ist hier seeehr relativ.
Mit schlecht gemachten Arrays meinte ich sowas wie die Array-Benutzung in deinem Beispiel, da wären einige Listen schneller ;)
 

Hijo2006

Aktives Mitglied
Hallo

ich habe es inzwischen mit einem Vector gelöst.
Der macht exakt, was ich will und liefert meine Ergebnisse.

Danke euch allen für den wertvollen Input
 

Hijo2006

Aktives Mitglied
Danke.
Seid mir nicht böse, ich habe nicht ansatzweise euer Niveau und das Wissen,
so dass ich es bewerten oder gar abschätzen kann.
Ich kann nur sagen, es läuft für meine Zwecke und auch performant..Unter
200msec.

Mein Programmieren würde euch eh die Haare zu Berge stehen lassen, aber
für meine 8Wochen in Java habe ich schon im Ergebnis für mich Sachen hinbekommen.
Das Tool macht was es soll und da es für Eigenbedarf kann ich auch mit meine
Verstössen gegen die reine Lehre verstossen.. smile
 

mrBrown

Super-Moderator
Mitarbeiter
Danke.
Seid mir nicht böse, ich habe nicht ansatzweise euer Niveau und das Wissen,
so dass ich es bewerten oder gar abschätzen kann.
Ich kann nur sagen, es läuft für meine Zwecke und auch performant..Unter
200msec.
Zum Lernen bist du doch hier ;)
Aus'm JavaDoc:
If a thread-safe implementation is not needed, it is recommended to use ArrayList in place of Vector.

ArrayList macht das gleiche wie Vector, nur ohne Threadsicherheit, und ist damit deutlich schneller ;)
 

Hijo2006

Aktives Mitglied
Glaub mir, das merke ich nicht mal. ich drück drauf und es geht das ergebnis auf.
Aber danke für den Hinweis- sowas merke ich mir immer ganz gerne :)
 

Hijo2006

Aktives Mitglied
Hab es aber dennoch geändert. Ging fix. Die Deklarationssyntax die gleich und nur die Aufrufmethode für das Element an der Stelle i geändert :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Mehrdimensionale Liste erstellen ohne Array Java Basics - Anfänger-Themen 14
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
P Performance Array und Liste Java Basics - Anfänger-Themen 13
M Array liste Verdrehen Java Basics - Anfänger-Themen 8
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
J Liste in Array Java Basics - Anfänger-Themen 2
D Array-Liste nur einmal ausgeben Java Basics - Anfänger-Themen 8
S jList --> Array einfügen und Liste löschen Java Basics - Anfänger-Themen 5
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
A Mehrdimensionalles Array in String ausgeben in Liste Java Basics - Anfänger-Themen 5
L Liste als Array realisieren Java Basics - Anfänger-Themen 23
A Liste in Array konvertieren Java Basics - Anfänger-Themen 30
J Initialisierung Array-Liste Java Basics - Anfänger-Themen 3
L Erste Schritte Super Constructor mit Array - Liste? Java Basics - Anfänger-Themen 15
D Array Liste Java Basics - Anfänger-Themen 7
A dynamisches Array - Index Liste Java Basics - Anfänger-Themen 2
M Array - String - Liste Java Basics - Anfänger-Themen 14
S Array Liste füllen Java Basics - Anfänger-Themen 16
S Liste oder Array filtern Java Basics - Anfänger-Themen 2
M Array oder Liste Java Basics - Anfänger-Themen 10
G Liste in Array schreiben Java Basics - Anfänger-Themen 13
J Array in einer Liste Java Basics - Anfänger-Themen 2
L array of objects in liste packen Java Basics - Anfänger-Themen 2
G Array - lineare Liste Java Basics - Anfänger-Themen 2
S 2dimensionales Array als Liste speichern Java Basics - Anfänger-Themen 19
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben