ArrayList<ArrayList<nn>> ?

VfL_Freak

Top Contributor
Hallo zusammen,

wir haben hier eben im Rahmen einer Suche nach einem Speicherleck über folgendes Thema diskutiert :

Es sollen mehrere Datensätze in einer Tabelle zeilenweise angezeigt werden. Im Beispiel, das wir diskutierten, war eine ArrayList<ArrayList<Object>> verwendet worden ....
Die innere Liste enthält dabei eine einzelnen Datensatz (Typ Object, weil es mehrere verschieden Datentypen im Satz gibt wie int, long, date und String)
Die äußere ArrayList enthält dann somit alle Datensätze ....

Da hierbei u. U. bis zu 80.000 Sätze (!!) eingelesen werden können, hatte ich angeregt, statt der inneren Arrayliste einen eigenen Datentyp (sprich: eigene neue Klasse mit den einzelnen Datenfeldern als Member) zu bauen und dann alles zusammen nur noch in einer Arrayliste (also quasi: ArrayList<eigenerDatenTyp>) zu verwalten.

Allerdings sind wir uns nicht darüber einig geworden, welche Variante die günstiger ist - sowohl auf dem Speicherbedarf bezogen als auch auf die Zugriffe !

Hat irgendwer Erfahrung mit dem Konstrukt ArrayList<ArrayList<Object>> ?
Ist es performanter ?
Wie sieht es denn nun wirklich mit dem Speicherbedarf aus ?

Danke im voraus !
Gruß
Klaus
 

ARadauer

Top Contributor
statt der inneren Arrayliste einen eigenen Datentyp (sprich: eigene neue Klasse mit den einzelnen Datenfeldern als Member) zu bauen und dann alles zusammen nur noch in einer Arrayliste (also quasi: ArrayList<eigenerDatenTyp>) zu verwalten.
ja unbedigt...

Allerdings sind wir uns nicht darüber einig geworden, welche Variante die günstiger ist - sowohl auf dem Speicherbedarf bezogen als auch auf die Zugriffe !
ich denke das fällt nicht ins gewicht...

habt ihr speicherprobleme? 80.000 Objekte, mhn kommt drauf an wie viele Spalten, aber ich denke für einen durchschnitts 2GB Arbeitsplatz rechner sollte das kein Problem sein...
 
G

Gast2

Gast
Ich denke in der Performance nehmen die beiden Varianten sich nicht viel, die ArrayList hat evtl. noch etwas mehr overhead als nen eigener Datentyp.
Aber zum Programmieren ist nen eigener Datentyp 100mal schöner als ne ArrayList<Object> in der einfach alles wahllos reingestopft wird...
 

VfL_Freak

Top Contributor
Moin,

erstmal Danke für die schnellen Antworten :toll:

habt ihr speicherprobleme? 80.000 Objekte, mhn kommt drauf an wie viele Spalten, aber ich denke für einen durchschnitts 2GB Arbeitsplatz rechner sollte das kein Problem sein...
Ja, hat der Kollege - zumindest zeitweise ;)
Die Spaltenanzahl ist unterschiedlich, aber es gibt schon Fälle wo bspw. 50.000 DS mit jeweils rund 1000 Byte angezeigt werden sollen :eek:

Aber zum Programmieren ist nen eigener Datentyp 100mal schöner als ne ArrayList<Object> in der einfach alles wahllos reingestopft wird...
das sehe ich genau so :D

Aber außer Schönheit gibt es wohl keine zwingenden Gründe für einen Umbau, oder ?

Na, mal schauen, ob wir unseren Chef überzeugen können :oops:

Danke und Gruß
Klaus
 

ARadauer

Top Contributor
Java:
import java.util.ArrayList;
import java.util.Date;


public class Kunde {
   
   private String name;
   private int alter;   
   private String vorname;
   private String adresse;      
   private Date geburtsdatum;
   
   public static void main(String[] args) {

      Runtime r = Runtime.getRuntime();
      System.out.println(r.freeMemory());      
      ArrayList<Kunde> kunden = new ArrayList<Kunde>();      
      for(int i = 0; i <80000; i++){
         kunden.add(new Kunde(System.currentTimeMillis()+"", 3, System.currentTimeMillis()+"", System.currentTimeMillis()+"", new Date()));
      }
      System.out.println(r.freeMemory());
      System.out.println("Anzahl: "+kunden.size());      
   }
   
   

   public Kunde(String name, int alter, String vorname, String adresse, Date geburtsdatum) {
      super();
      this.name = name;
      this.alter = alter;
      this.vorname = vorname;
      this.adresse = adresse;
      this.geburtsdatum = geburtsdatum;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public int getAlter() {
      return alter;
   }

   public void setAlter(int alter) {
      this.alter = alter;
   }

   public String getVorname() {
      return vorname;
   }

   public void setVorname(String vorname) {
      this.vorname = vorname;
   }

   public String getAdresse() {
      return adresse;
   }

   public void setAdresse(String adresse) {
      this.adresse = adresse;
   }

   public Date getGeburtsdatum() {
      return geburtsdatum;
   }

   public void setGeburtsdatum(Date geburtsdatum) {
      this.geburtsdatum = geburtsdatum;
   }
}


4972560
1597160
Anzahl: 80000
mhn sind das byte?
dann haben 80.000 Kunden 3 MB gebraucht... nicht so dramatisch, wenn man bedenkt auf welchen monster kisten wir arbeiten... wäre es eine webanwendung, wäre das was anderes, aber da wirst du wohl nicht auf einen schlag 80000 Datensätze laden..
mhn hat meine VM wenn ich sie aus Eclipse starte standarmäßig nur 5 MB?
 

ARadauer

Top Contributor
Aber außer Schönheit gibt es wohl keine zwingenden Gründe für einen Umbau, oder ?
wenn wir jetzt mit "Schönheit" sauberen Code meinen, ist das weit mehr als eine Frage der Ästhetik. Hier gehts um Wartbarkeit, Stabilität, Skalierbarkeit, Fehleranfälligkeit und in Folge Kosten bzw kann es zum kompleten scheitern des Projekts führen...

Wenn irgend jemand in Spalte 3 mal was ändert, und dann vielleicht zwischen 4 und 5 noch was einfügt und die GUI meint das 4 jetzt 5 ist, es aber eigentlich jetzt 6 ist... :-(

da macht es schon mehr Sinn wenn ich getVorname aufrufe wenn ich den Vornamen will
 

VfL_Freak

Top Contributor
Moin,

wenn wir jetzt mit "Schönheit" sauberen Code meinen, ist das weit mehr als eine Frage der Ästhetik. Hier gehts um Wartbarkeit, Stabilität, Skalierbarkeit, Fehleranfälligkeit und in Folge Kosten bzw kann es zum kompleten scheitern des Projekts führen...

Wenn irgend jemand in Spalte 3 mal was ändert, und dann vielleicht zwischen 4 und 5 noch was einfügt und die GUI meint das 4 jetzt 5 ist, es aber eigentlich jetzt 6 ist... :-(

da macht es schon mehr Sinn wenn ich getVorname aufrufe wenn ich den Vornamen will
richtig, in diese Richtung ging auch meine Argumentation ....
Allerdings ist es hier leider so, das Dinge wie gerade Wartbarkeit von Code oder auch Folgekosten vom Chef "bewusst" außer Acht gelassen werden ;(

Danke und Gruß
Klaus
 

VfL_Freak

Top Contributor
oops, noch ein Post :D


mhn sind das byte?
dann haben 80.000 Kunden 3 MB gebraucht... nicht so dramatisch, wenn man bedenkt auf welchen monster kisten wir arbeiten... wäre es eine webanwendung, wäre das was anderes, aber da wirst du wohl nicht auf einen schlag 80000 Datensätze laden..
mhn hat meine VM wenn ich sie aus Eclipse starte standarmäßig nur 5 MB?
Nein, ist ist keine Webanwendung, aber es sind schon Byte!
Es sind Suchergebnisse, bei denen unser Chef u. U. den gesamten Tabelleninhalt :eek: sehen will.
Ich hatte ja auch schon angeregt, immer nur soviele DS zu holen, wie auf einer Seite der Tabelle angezeigt werden und quasi durch neuen Serveranfragen auf die vorherige oder nächste Seite zu wechseln, was aber bislang nicht umgesetzt wurde.
Ist allerdings auch ein bisschen schwierig umzusetzen, das wir als "Datenbank" BTrieve einsetzen :lol:

Na, ok, ich habe erstmal ein paar nette Argumente für die nächste Gesprächsrunde :applaus:

EDIT
war da nicht was mit 80% der kosten seiner software verschlingt die wartung^^
Mindestens ........
/EDIT

Nochmals Danke und Gruß
Klaus
 

VfL_Freak

Top Contributor
Moin,

dann hat er sich gerade selbst gemeldet Wartungsarbeiten und Bugfixes etc durchzuführen.
leider nicht wirklich, da er allenfalls noch ein bisschen Assembler kennt :eek: :lol:

bzw ich würde dann auch mal Pünktlichkeit und Zeitplanung ausser Acht lassen :D
ICH mache das auch oft so (und sei es um zeit für andere Umbauten rauszuschinden), aber andere Kollegen trauen sich nicht :D

tschüss
Klaus
 
Zuletzt bearbeitet:
B

bygones

Gast
leider nicht wirklich, da er allenfalls noch ein bisschen Assembler kennt :eek: :lol:
dann bedarf es mal jemanden mit Arsch in der Hose der in einem Gespräch klar macht dass er a) keine Ahnung von Softwareentwicklung hat und b) sich von einem Wissenden belehren lassen sollte (es sollte doch einen Gruppenleiter/Projektleiter oder wenn auch immer bei euch geben der Ahnung hat was man wie macht ..... ansonsten ist die Titanic schon längst gegen den Eisberg gefahren)
 

VfL_Freak

Top Contributor
Das hast Du gut erkannt :D

Es gibt eigentlich nur den Chef und ein halbes Dutzend Entwickler ... und dann immer feste aufeinander :lol:

Ja ja, das Leben ist eins der Härtesten :D

Gruß
Klaus

PS: und keine Sorge, es ist keine Kauf-SW, sondern 'nur' die hausintern Genutzte :oops:
 
Zuletzt bearbeitet:

Neue Themen


Oben