Doppelte Elemente in ArrayList

Die equals-Methode wird genutzt um Objecte zu vergleichen. Da Java ja nicht wissen kann wann ein Object von dir gleich einem anderen ist, musst du das selbst implementieren. Das ist auch richtig, dass es in der DBDatensatz gemacht werden soll, diese willst du ja immerhin vergleichen.

Das mit der Exception kannst du leicht umgehen, wenn du auch prüfst ob die size deiner Liste > 0 ist. Wenn dies nicht so ist, kannst du das Element einfach hinzufügen.

Was machst du eigentlich mit der Liste die zurück gegeben wird. Kannst du mal den Quellcode zeigen wie es weiter geht?

MFG

zEriX
 
Die Liste wird in ner anderen Klasse verwendet, um sie anzuzeigen.
Hintergrund:
Wird ein Datensatz gesucht und zu dem Suchbegriff passen mehrere Datensätze, sollen die KdNr und der Name eines Datensatzes in einem extra Fenster angezeigt werden.

Durch ActionListener soll dann zwischen den Suchergebnissen im Hauptfenster hin und her geschaltet werden können.

Code:
    public void anzeigen() {

        javax.swing.JPanel neuesPanel = new javax.swing.JPanel();
                
        for(int i = 0; i <= getErgebnisse().size() - 1; i++){
            
            ergebnisPanel.setLayout(new GridLayout(getErgebnisse().size(), 1, 5, 5));
            javax.swing.JLabel ergebnisLabel = new javax.swing.JLabel();
            
            Object einDatensatz = (ergebnisse.get(i));
                        
            String kdnr = String.valueOf(((DBDatensatz) einDatensatz).getkdNr());
            String name = String.valueOf(((DBDatensatz) einDatensatz).getName());
                        
            ergebnisLabel.setText("Kundennummer:" + kdnr + " " +  "Kundenname: "+ name);
            ergebnisLabel.setVisible(true);
            ergebnisPanel.add(ergebnisLabel);
        }
        pack();
        setSize(getSize().height, getSize().width);
        einPanel.add(ergebnisPanel, BorderLayout.CENTER);
        getContentPane().add(einPanel);
    }

Aber wenn ich die equals-Methode implementiere, wie ich soll ich dann zwei Datensätze voneinander unterscheiden?
 
Ich denke mal getErgebnis ist die Methode von oben. Aber was ist jetzt die Variable ergebnisse?

Löschst du eigentlich die Liste mit den Suchergebnissen bevor du eine neue Suche startest?

MFG

zEriX
 
@ TheAnswer:
Wie würdest du denn entscheiden, das zwei Datensätze gleich sind?
Gibt es eine eindeutige ID (Kundennummer?), oder müssen alle Felder gleich sein..

Je nachdem was du als gleich ansieht, muss die equals Methode das entsprechend überprüfen..

Hallo,
Also ich denke bei einem HashSet ist die zu equals(...) passende Implementierung von hashCode() nicht ganz unerheblich ;-)
Gruß Tom

Ja da denkst du richtig;). Wollte auch nur eine allgemeingültige Aussage für das Set machen.. Weis der Teufel, wer da ein Hash eingetippt hat.. ich wars nicht :rolleyes:

@ zerix.. Niemals von etwas ausgehen ;)

*grüssle*
MeinerEiner
 
Ich denke mal getErgebnis ist die Methode von oben. Aber was ist jetzt die Variable ergebnisse?

Löschst du eigentlich die Liste mit den Suchergebnissen bevor du eine neue Suche startest?

- Das is die ArrayList
- Das is gut, dass du das sagst....ich lösche sie bisher nicht. :rolleyes::suspekt:
Aber ich suche während der Laufzeit bisher nur einmal, wenn ich dann seh, dass Elemente doppelt vorkommen, beende ich wieder...
 
Wenn das jetzt alles so ist wie ich es vermute, liegt es daran, dass du mit getErgebnisse suchst und diese zwei mal aufrufst. Da du die liste auch niemals leerst, stehen dann die Werte doppelt in der Liste.

Code:
for(int i = 0; i <= getErgebnisse().size() - 1; i++){
            
            ergebnisPanel.setLayout(new GridLayout(getErgebnisse().size(), 1, 5, 5));

Du solltest diese Methode nur einmal aufrufen und das Ergebnis in einer Variablen speichern.

MFG

zEriX
 
Sorry für die späte Antwort. War beruflich im Stress....

ich hab das Problem anders gelöst, nachdem ich 2 Tage nicht programmiert hab is es mir wie ein Blitz eingefahren.. ich dachte nur "warum benutzt du eigentlich keine sql abfrage?!" :rolleyes:

ja ja, so is das :)

ich danke euch trotzdem für eure zahlreichen Antworten!

Liebe Grüße.
 
Wahrscheinlich hätte es die Nutzung eines "break;" in den case-Abschnitten des switch-Statements auch gebracht :)
 
Zurück