Vectoren

azenth

Mitglied
Hallo,

ich habe ein Problem mit Vectoren, was ich einfach nicht lösen kann.

Mein Problem ist folgendes:

Ich habe 2 Vectoren: vec1 und vec2.

vec1 enthält die Elemente {a, b, c}
vec2 enthält ebenfalls die Elemente {a, b, c}

wenn ich nun den Befehl

vec1.removeAll(vec2)

anwende, dann würde ich erwarten, dass vec1 keine Elemente mehr enthält.

Stattdessen hat vec1 egal wie viele Elementa ich habe immer zusätzlich das letzte eigene Element, in diesem Fall also {c}

im Fall das vec1 die Elemente {a, b, c, d, e}hätte
und vec2 die Elemente {b, d, e}

hätte vec1 nach ausführen des Befehls in meinem Fall die Elemente {a, c, e}

Das erscheint mir als unlogisch.

Hat jemand eine Idee woran das liegen könnte?

Gruß
Azenth
 

inv_zim

Gesperrter Benutzer
Edit: Ich habe deine Frage falsch verstanden, das tut mir leid! Den Beitrag bitte nicht mehr beachten :oops:
 
Zuletzt bearbeitet:

azenth

Mitglied
Oh wow,

was für eine schnelle Antwort.

Ich verstehe. Hast du eventuell für mich einen Tipp, wie ich dann vorgehen müsste, um mein Problem zu lösen.

Sprich, dass alle Elemente die sowohl vec1 als auch vec2 haben aus dem vec1 entfernt werden?
 
S

SlaterB

Gast
Java:
public class Test {
    public static void main(String[] args)     {
        Vector v1 = new Vector();
        Vector v2 = new Vector();
        Collections.addAll(v1, "a", "b", "c", "d", "e");
        Collections.addAll(v2, "b", "d", "e");
        v1.removeAll(v2);
        System.out.println(v1); // a, c, was sonst?
    }
}
wo zum Himmel ist hier eine Frage? ;)
immer Code dazu posten, die alte Grundregel,
bei eigenen Klassen kann natürlich equals() kaputt sein oder gar fehlen, besonders falls noch mit Vererbung
 
Zuletzt bearbeitet von einem Moderator:

fastjack

Top Contributor
Deine Elemente haben whl. eine falsche Equals-Metode oder sie ist nicht überschrieben.

Ich habe 2 Vectoren: vec1 und vec2.

vec1 enthält die Elemente {a, b, c}
vec2 enthält ebenfalls die Elemente {a, b, c}

wenn ich nun den Befehl

vec1.removeAll(vec2)

anwende, dann würde ich erwarten, dass vec1 keine Elemente mehr enthält.

Ist auch so.

Java:
    @Test
    public void shouldRemoveAllEntries() {
        Vector<String> vector1 = createVectorFromElements("a", "b", "c");
        Vector<String> vector2 = createVectorFromElements("a", "b", "c");
        vector1.removeAll(vector2);
        assertTrue("vector is not empty!", vector1.isEmpty());
    }

    Vector<String> createVectorFromElements(String... elements) {
        Vector<String> vector = new Vector<String>();
        for(int i = 0; i < elements.length; i ++) {
            vector.add(elements[i]);
        }
        return vector;
    }

im Fall das vec1 die Elemente {a, b, c, d, e}hätte
und vec2 die Elemente {b, d, e}

hätte vec1 nach ausführen des Befehls in meinem Fall die Elemente {a, c, e}

Java:
    @Test
    public void shouldRemoveAllEqualsEntries() {
        Vector<String> expected = createVectorFromElements("a", "c");
        Vector<String> vector1 = createVectorFromElements("a", "b", "c", "d", "e");
        Vector<String> vector2 = createVectorFromElements("b", "d", "e");
        vector1.removeAll(vector2);
        assertEquals("vector must contains 'a' and 'c'!", expected, vector1);
    }

funktioniert auch ;)

Wie gesagt, die equals-Methode ist wichtig.
 

azenth

Mitglied
Also ich möchte eine Automatisierung realisieren zwischen einer Soll-Zustand Datenbank und dem tatsächlichen Ist-Zustand meiner Umgebung.

sprich:

vec1 enthält die Elemente des Ist-Zustands.

vec2 enthält die Elemente des Soll-Zustands.

wenn ich in der Datenbank nun den Soll-Zustand ändere um z.B. neue Elemente aufzunehmen oder Elemente zu entfernen. Dann soll das mit dem IST-Zustand vergliechen werden und dementsprechend geändert werden.

Hier der entsprechende Code - Vereinfacht:
Code:
private void editChanges(Vector existingElements, Vector DBElements)
{
    //add new Elements
    existingElements.removeAll(DBElements)

    #Befehl zum hinzufügen der neuen Elemente
}


selbiges will ich in umgekehrter Reihenfolge dann zum löschen von Elementen nutzen. 

private void editChanges(Vector existingElements, Vector DBElements)
{
    //add new Elements
    DBElements.removeAll(existingElements)

    #Befehl zum löschen der Elemente
}

Ich hoffe ich konnte mein Problem nun genauer vermitteln.

Gruß
 
S

SlaterB

Gast
die anderen Postings zwischendurch gesehen?
ohne Informationen über DBElements, was immer das sein mag, kann niemand weiteres dazu sagen

-----

zwei Methoden editChanges(Vector, Vector) wären übrigens von einem Programm nicht zu unterscheiden,
Namen von Parametern, Kommentare, Code darin und sonstige Intentionen spielen keine Rolle,
Methoden-Signaturen müssen (um Generics bereinigt) eindeutig sein
 

azenth

Mitglied
Ich habe die Postings erst nach meinem Post gesehen.

Ich werde mal für das Problem wichtigen Code-Zeilen zuschneiden.

Und erstmal eure Tipps zum testen aufnehmen.

Danke schon mal für all die vielen schnellen Antworten.
 

fastjack

Top Contributor
Code:
Vector existingElements, Vector DBElements

Die Klassen der Elemente in diesen Vektoren brauchen eine korrekt überschriebene equals-Methode.
 

azenth

Mitglied
Hallo Leute,

mein Problem hat sich erledigt.

Mein Problem war, dass in einem Vector die Strings einen \0 enthielten. Die Strings in beiden Vectoren sahen optisch gleich aus, aber wenn man die Länge ausgegeben hat, war ein String um ein Zeichen länger.

Ich danke euch auf jedenfall für eure Hilfe.

Gruß
Azenth
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ste3et_C0st Vectoren berechnen Java Basics - Anfänger-Themen 8
T .add(E) für mehrdimensionale Vectoren Java Basics - Anfänger-Themen 5
P Attribute von Objekten in Vectoren überprüfen Java Basics - Anfänger-Themen 4
S System.arraycopy für Vectoren Java Basics - Anfänger-Themen 12
L Arbeiten mit Vectoren in einer Hashtable Java Basics - Anfänger-Themen 2
G Vectoren in DefaultTableModel Java Basics - Anfänger-Themen 8
P Was sind Vectoren und Maps in Java? Java Basics - Anfänger-Themen 3
M problem mit vectoren Java Basics - Anfänger-Themen 2
G Vectoren Java Basics - Anfänger-Themen 7
W Java Cast bei Vectoren Java Basics - Anfänger-Themen 10
J JTable + Vectoren. was stimmt da nicht? Java Basics - Anfänger-Themen 2
I Vectoren abhängig voneinander sortieren Java Basics - Anfänger-Themen 17
B Einen Array aus vielen Vectoren Java Basics - Anfänger-Themen 3
N Vergleich zweier Elemente verschiedener Vectoren Java Basics - Anfänger-Themen 2
F Sortieren: Zwei Vectoren ineinander verschachtelt Java Basics - Anfänger-Themen 6
K Vectoren vergleichen Java Basics - Anfänger-Themen 2
J Vectoren im Vector? Geht das? Java Basics - Anfänger-Themen 5
S Vectoren in Datein speichern --> Fehlermeldung Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben