Eindeutigkeit von Objekten

Status
Nicht offen für weitere Antworten.

Danny14

Neues Mitglied
Hallo @all,

ich weiß zwar nicht genau ob das ein Anfägerproblem ist aber eine Lösung wäre trotzdem schön.

Ich lasse aus einer Datei Datensätze auslesen, dies sind einzelne Rechnungen. Diese Rechnungen sollen jeweils in einem Objekt der Klasse Rechnung gespeichert werden. Alle Objekte vom Typ Rechnung werden in einem Vector verwaltet. Nachfolgend der Quelltext.

Code:
public class RechnungFuellen {
    private Vector<Rechnung> vRechnungList = new Vector<Rechnung>();
    private int counter = 0;
    
        public RechnungFuellen() {
        }
	
        public Vector getRechnungen(String jahr, String monat) {
        //...
        //...
			
            if (RecordSet[0].equals(jahr) && RecordSet[1].equals(monat)) {
                   
                vRechnungList.add(counter, new Rechnung() );
                    
                vRechnungList.get(counter).setJahr(RecordSet[0]);
                vRechnungList.get(counter).setMonat(RecordSet[1]);
                vRechnungList.get(counter).setGeschaeft(RecordSet[2]);
                vRechnungList.get(counter).setBetrag(Double.parseDouble(RecordSet[3]));
                    
                counter++;
            }
        //...
        //...
        }
    } catch(IOException fe) {
        System.out.println("Die Datei zum einlesen wurde nicht gefunden oder ähnliches.");
    }    
    
    for(int i=0; i<vRechnungList.size(); i++) {
        System.out.println("GS: " + vRechnungList.get(i).getGeschaeft + " BTR: " + vRechnungList.get(i).getBetrag);
    }

    return vRechnungList;
}

Das Problem liegt innerhalb des if-Block (meiner Meinnug nach). Schon bei der Ausgabe vor dem return-Statement wird nur der letzte Datensatz angezeigt. Dies geschieht zwar so oft, wie Datensätze in den Vector hinzugefügt wurden aber eben nur für den letzten. Ich habe den Verdacht, dass die angelegten Objekte immer wieder "überschrieben" werden. Alle set- und get-Methoden sind in der Klasse Rechnung implementiert und weisen nur die übergebenen Werte an die globalen Variablen der Klasse. Ich arbeite derzeit mit der JRE 1.5.0_06. Ich habe schon verschiedene Varianten für die Implementierung versucht aber das Ergebnis ist immer identisch.

Danke und viele Grüße
 

SnooP

Top Contributor
Debugge das doch mal richtig... setz nen breakpoint vor dem return und schau dir die einzelnen einträge in dem vektor an, ob das jeweils dasselbe objekt ist...

Abgesehen davon würde ich das mit dem get.set auch anders lösen - erstelle erst das Rechnungs-Objekt weise alle Records zu und add es dann dem Vektor... das sieht imho besser aus ;)
 

Wildcard

Top Contributor
Erstens hast du zuviel Code abgeschnitten, man sieht ja die Schleife gar nicht mehr, und die Einrückung passt irgendwie überhauptnicht ???:L
2. Furchtbar...
2.1 Niemals einen Vector zurückgeben, da das zuviel über die Implementierung aussagt. Bleib abstrakt mit List oder noch besser Collection
2.2 So solltest du nicht über eine Liste iterieren. Nimm stattdessen einen Iterator, oder foreach.
2.3
Code:
                vRechnungList.add(counter, new Rechnung() );
                   
                vRechnungList.get(counter).setJahr(RecordSet[0]);
                vRechnungList.get(counter).setMonat(RecordSet[1]);
                vRechnungList.get(counter).setGeschaeft(RecordSet[2]);
                vRechnungList.get(counter).setBetrag(Double.parseDouble(RecordSet[3]));
Das ist tödlich. jeder Zugriff auf eine Collection kostet viel Zeit. Speicher dir das Objekt zwischen
2.4
Code:
    for(int i=0; i<vRechnungList.size(); i++) {
        System.out.println("GS: " + vRechnungList.get(i).getGeschaeft + " BTR: " + vRechnungList.get(i).getBetrag);
    }
Eigentlich sollte man String + String niemals benuzten, aber in einer Schleife ist es tödlich. Das ist die Perfomancefalle nummer eins in Java :noe:
Nimm einen StringBuilder oder einen StringBuffer
2.5 Variablen werden klein geschrieben
 

hupfdule

Top Contributor
Habe deinen Code nur oberflächlich überflogen. Zwei Dinge sind mir aufgefallen:

1. Du musst den counter nicht benutzen. Ein Vector hat eine Methode .add(Object), das ein Objekt immer hinzufügt
2. Ein Vector hängt immer an. Objekte werden nicht automatisch überschrieben. Deswegen heißt die Methode auch "add" und nicht "set".

Ist vlt. deine Bedingung falsch? Wie oft kommst du denn in den des if-Block?
 

hupfdule

Top Contributor
Wildcard hat gesagt.:
Eigentlich sollte man String + String niemals benuzten, aber in einer Schleife ist es tödlich. Das ist die Perfomancefalle nummer eins in Java

So weit ich weiß, optimieren die aktuellen Java Compiler das automatisch zu einem StringBuilder oder StringBuffer.
 

SnooP

Top Contributor
hupfdule hat gesagt.:
Wildcard hat gesagt.:
Eigentlich sollte man String + String niemals benuzten, aber in einer Schleife ist es tödlich. Das ist die Perfomancefalle nummer eins in Java

So weit ich weiß, optimieren die aktuellen Java Compiler das automatisch zu einem StringBuilder oder StringBuffer.
Nein - das ist falsch... es wird zwar bei der + Konkatenation ein StringBuilder erzeugt - logisch, anders geht es ja gar nicht, da Strings immutable sind, aber es wird bei jedem + ein neuer SB erstellt... was zum Performanceeinbruch führt. Besser ists (und auch messbar!) einen SB zu erstellen und dann immer zu appenden.
 

Wildcard

Top Contributor
SnooP hat gesagt.:
Nein - das ist falsch... es wird zwar bei der + Konkatenation ein StringBuilder erzeugt - logisch, anders geht es ja gar nicht, da Strings immutable sind, aber es wird bei jedem + ein neuer SB erstellt... was zum Performanceeinbruch führt. Besser ists (und auch messbar!) einen SB zu erstellen und dann immer zu appenden.
Dieses 'messbar' kann übrigens in ungünstigen Fällen bei einem Faktor > 100 liegen
 

hupfdule

Top Contributor
SnooP hat gesagt.:
hupfdule hat gesagt.:
So weit ich weiß, optimieren die aktuellen Java Compiler das automatisch zu einem StringBuilder oder StringBuffer.
Nein - das ist falsch... es wird zwar bei der + Konkatenation ein StringBuilder erzeugt - logisch, anders geht es ja gar nicht, da Strings immutable sind, aber es wird bei jedem + ein neuer SB erstellt.

Habs grad mal getestet.

Geschriebener Code:
Code:
public class StringTest{

   public static void main(String[] args){
     String a= "a";
     String b= "b";
     String c= "c";
     String d= "d";
     System.out.println(a + b + c + d);
   }

}

Diesen mit java 1.5 kompiliert und mit jad dekompiliert. Ergebnis:

Code:
import java.io.PrintStream;

public class StringTest
{

    public StringTest()
    {
    }

    public static void main(String args[])
    {
        String s = "a";
        String s1 = "b";
        String s2 = "c";
        String s3 = "d";
        System.out.println((new StringBuilder()).append(s).append(s1).append(s2).append(s3).toString());
    }
 

Wildcard

Top Contributor
Diese Strings sind zum Zeitpunkt des kompilierens bekannt, da funktioniert das natürlich :wink:
 

Danny14

Neues Mitglied
Die Ausgabe vor dem return-Statement ist nur ein Hilfsmittel und kommt sowieso weg, wenn alles klappt. Des Weiteren weiß ich, dass ich den counter nicht benutzen muss. Ob mit oder ohne das Problem bleibt dasselbe.

Der if-Block wird mehrmals durchlaufen. Kann 10, 20 oder 30 mal sein. Das lässt dich vor nie abschätzen. Die Bedingungen sind alle korrekt.

Auch den ersten Vorschlag, erst das Rechnungs-Obkekt zu erstellen, die Werte zuzuweisen und dann mit der add-Methode dem Vector hinzuzufügen, habe ich schon probiert. Es kommt zu gleichen Problem.
 

KSG9|sebastian

Top Contributor
Code:
String tmp= getStars(1024) ;

private static void getStars(intn){
String s = "" ;

for (inti = 0; i < n; i ++){
  s += "*" ;
}

return ;
}

Das Ding braucht ~2.000 kbytes. s += "*2 wird zerlegt zu s = new StringBuffer(s).append("*").toString();
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
T Kollision von 2 Objekten Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
N Vererbung Queue bestehend aus Superclass- und Subclass-Objekten Java Basics - Anfänger-Themen 7
B Compiler-Fehler Array aus Objekten übergeben Java Basics - Anfänger-Themen 7
YAZZ Schlüsselworte Töten von Objekten Gameover Java Basics - Anfänger-Themen 2
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
districon Vergleichen von Objekten Java Basics - Anfänger-Themen 20
Zeppi OOP Array in Objekten Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
A Klasse Menge mit Objekten der Klasse Person Java Basics - Anfänger-Themen 8
S Auf Array aus Objekten zugreifen? Java Basics - Anfänger-Themen 1
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
D Operatoren Mit Objekten rechnen Java Basics - Anfänger-Themen 7
E Datentypen Einfügen von Objekten in eine Map Java Basics - Anfänger-Themen 2
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
B ID von unterschiedlichen Objekten bekommen? Java Basics - Anfänger-Themen 2
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
L Rechnen mit Objekten Java Basics - Anfänger-Themen 3
S werte von objekten in schleife verändern Java Basics - Anfänger-Themen 14
D Zusammenarbeit von Objekten Java Basics - Anfänger-Themen 1
Y Begrenzte Anzahl an Objekten? Java Basics - Anfänger-Themen 12
Kornblume Nulltyp eines Arrays von Objekten? Java Basics - Anfänger-Themen 10
A Frage zur Aufgabe Uhrzeit einstellen mit Objekten Java Basics - Anfänger-Themen 18
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
arjoopy Kapselung Übergabe von Objekten aus ArrayList Java Basics - Anfänger-Themen 4
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
R Methoden Methode ruft Methode auf, ruft Methode auf (mit Objekten) Java Basics - Anfänger-Themen 4
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
Shizmo PriorityQueue mit Objekten Java Basics - Anfänger-Themen 10
E Instanzieren von Objekten verkürzen Java Basics - Anfänger-Themen 1
F Interaktion von Objekten verschiedener Klassen... Java Basics - Anfänger-Themen 13
D Effiziente Verwaltung der Objekten und Unterobjekten Java Basics - Anfänger-Themen 18
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
L Subklasse von ArrayList nur mit bestimmten Objekten füllen Java Basics - Anfänger-Themen 1
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
S Problem mit augabe von Objekten Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
W Was passiert mit Objekten die nicht in Objektvariablen initialisiert werden ? Java Basics - Anfänger-Themen 3
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
Y Gleiche Arrays aus einem Array mit Objekten Java Basics - Anfänger-Themen 5
K Min eines Arrays mit Objekten Java Basics - Anfänger-Themen 6
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Statische Arrays von Objekten Java Basics - Anfänger-Themen 2
J Methoden Einfügen von Objekten nach Alphabet in ArrayList funktioniert nicht Java Basics - Anfänger-Themen 2
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
TheSorm Koordinaten von gedrehten Objekten Java Basics - Anfänger-Themen 4
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3
O Java Erzeugung von neuen Objekten Java Basics - Anfänger-Themen 1
J Verständnisfragen zu dem Thema Objekten Java Basics - Anfänger-Themen 7
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
O Größe von Objekten Java Basics - Anfänger-Themen 5
Y Variable Menge von Objekten erzeugen und mit ihren Attributen rechnen Java Basics - Anfänger-Themen 7
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
F Umgang mit referenzierten Objekten bei ArrayList Java Basics - Anfänger-Themen 1
M Löschen von Objekten während Iteration über Liste Java Basics - Anfänger-Themen 9
E Array von Objekten einer selbst definierten Klasse mit eindeutigem Namen Java Basics - Anfänger-Themen 2
C For schleife mit Array und Objekten Java Basics - Anfänger-Themen 17
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0
U Übergabe von Objekten Java Basics - Anfänger-Themen 0
C Werte aus zwei Objekten miteinander vergleichen Java Basics - Anfänger-Themen 3
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
E Erste Schritte Sortieren von Objekten in doppelt-verlinkter Liste Java Basics - Anfänger-Themen 9
R addition von 2 Array Objekten Java Basics - Anfänger-Themen 5
V Grundlegendes Zu Objekten/Klassen Java Basics - Anfänger-Themen 10
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
C Probleme mit neuen Objekten Java Basics - Anfänger-Themen 3
S Erste Schritte Bluej Automatisches Einfügen von Objekten Java Basics - Anfänger-Themen 4
D ID von Objekten in Arraylist Java Basics - Anfänger-Themen 3
B Datentypen Inhalt von Objekten miteinander vergleichen Java Basics - Anfänger-Themen 2
R Erste Schritte Objekte mit anderen Objekten als Inhalt Java Basics - Anfänger-Themen 4
V Frage zum Löschen von Objekten Java Basics - Anfänger-Themen 2
C ArrayList mit Objekten Java Basics - Anfänger-Themen 4
P Mindestangaben beim anlegen von Objekten Java Basics - Anfänger-Themen 4
H Array von Klassen Objekten Java Basics - Anfänger-Themen 6
J Array mit Objekten sortieren Java Basics - Anfänger-Themen 11
J Bilder von Objekten Java Basics - Anfänger-Themen 3
G Scrollbares Fenster bei mehr als 5 Objekten Java Basics - Anfänger-Themen 4
B Methoden auf Objekten Java Basics - Anfänger-Themen 12
D OOP Objekt in mehreren Objekten Java Basics - Anfänger-Themen 3
J Datentypen List - gleiche Einträge bei neuen Objekten Java Basics - Anfänger-Themen 31
R Verschieben eines Arrays aus Objekten Java Basics - Anfänger-Themen 16
M Frage zum Casten von Objekten Java Basics - Anfänger-Themen 5
R Polymorphie Array mit Objekten Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben