Vectoren abhängig voneinander sortieren

Status
Nicht offen für weitere Antworten.
I

ich²

Gast
Guten Morgen Forum,

wie kann ich zwei Vectoren abhänig voneinander sortieren? Die beiden sehen z. B. so aus

Vec 1

"Hallo"
"ABC"
"Z"
"Wurst"

Vec 2

"sagt horst"
"DEF"
"A"
"haut"

Jetzt soll Vec 1 sortiert werden, praktisch so

"ABZ"
"Hallo"
"Wurst"
"Z"

und Vec 2 soll mitsortiert werden, damit die Indices praktisch die selben bleiben

"DEF"
"sagt horst"
"haut"
"A"

Hab ein wenig mit Sortieralgorithmen rumgespielt, aber wie ichs auch versuche, ich bekomme es nicht gebacken dass der Vec 2 genauso sortiert wird wie Vec 1. Ist bestimmt ganz simpel nur ich stell mich vermutlich wieder zu blöd an

mfg

ich²
 

Sky

Top Contributor
Du könntest deine Elemente in eine SortedMap legen dann wäre der Inhalt von vec1 dein Key und von vec2 deine values:

Code:
    SortedMap map = new TreeMap();
    for (int i = 0; i < vec1.size(); i++) {
      map.put(vec1.get(i), vec2.get(i));
    }
 
I

ich²

Gast
Danke für deine Antwort.

Da gibt sich aber ein Problem. in Vec 1 kann zweimal der selbe Eintrag stehen, aber an den selben stellen in Vec 2 steht etwas anderes. Sry, hatte ich vergessen dazu zu schreiben.

mfg

ich²
 

Sky

Top Contributor
Warum nimmst Du überhaupt zwei Vectoren ?

Wenn Du ein eigenes Object machst und es in einen Vector packst, hättest Du wahrscheinlich weniger Problem:

Code:
class MyVectorContent {
  private String string1;
  private String string2;

  public MyVectorContent( String string1, String string2 ) {
    this.string1 = string1;
    this.string2 = string2;
  }

  public String getString1() {
    return this.string1;
  }

  public String getString2() {
    return this.string2;
  }
}

Und dass dann in den Vector. Für's Sortieren schreibst Dir noch nen Comparator und fertig biste.
 
I

ich²

Gast
Guten Morgen,

danke! Das ist genial. Ich sollte wohl anfangen ein wenig über meinen Tellerrand hinaus zu schauen. Ich habe aber leider noch nie etwas mit Comparator gemacht und floglich auch kA wie sowas funktionert. Kann mir da evtl. jemand unter die Arme greifen?

mfg

ich²
 

Sky

Top Contributor
Dazu musst Du
a) entweder das Interface Comparable in der Klasse MyVectorContent implementieren

b) oder eine neue Klasse schreiben, welche das Interface Comparator implementiert

Dann einfach bei
a)
Code:
Collections.sort(myVector);
b)
Code:
Collections.sort(myVector, myVectorContentComparator);
aufrufen.
 
G

Guest

Gast
Hallo sky,

soweit hatte ich das auch schon, mein Problem lag eher daran, was in der Methode

Code:
compareTo

stehen muss. Daraus werde ich nicht schlau ???:L

mfg

ich²
 

Sky

Top Contributor
Zum Bespiel:
Code:
return string1.compareTo( anotherString1 )

anotherString1 kommt dann von dem Paramter Object der Methode "compareTo" (bspw. getString1 aufrufen)
 
B

bygones

Gast
Warum nicht einfach die Suchfunktion

MAn wird von Threads erschlagen, wenn man nach compareTo oder Comparable sucht...

man muss nicht immer wieder alles neu fragen !!
 
I

ich²

Gast
Danke an euch beide (sky und dbac), ich scheine aber zu dämlich zu sein mir soetwas zu schreiben. Hab da den ganzen Mittag versucht und rumprobiert, habs aber net hinbekommen. Hobbit (arbeitet ja mit mir in einer Firma) konnte mir da auch net weiterhelfen :(.

mfg

ich²
 
G

Guest

Gast
Hol dir die erst bessere QuickSort Implementierung (z.B. unter ...jdk###\demo\applets\SortDemo ist eins dabei)
und erweitere die Parameterliste um den zweiten Vector.
Eigentlich brauchst du dann nur die Stellen anzupassen, wo die Einträge im Vector vertauscht werden und wo
der rekursive Aufruf erfolgt. (Methoden Swap und Quicksort)
 
I

ich²

Gast
Guten Abend

@ L-ectron-X

nein, hab leider noch keine Lösung

@ Gast

habe bereits selber einen Quicksort geschrieben, aber ich schau mal ob ich damit was anfangen kann. Thx.

mfg

ich²
 
B

Beni

Gast
Frisch aus der API was zur compareTo-Methode des Comparators:
a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

Und etwas mathematischer:
compare( a, b ) ist...
< 0 falls a < b
= 0 falls a = b
> 0 falls a > b
 
G

Guest

Gast
@Beni
Das mit dem Comparator hilft ihm nicht weiter, da man beim Comparator nicht zwei
Indizies zum Vergleich übergeben kriegt, sondern zwei Objekte. Woher die kommen,
erfährst du im Comparator nicht.
Kurz: Eigene Sortierung notwendig. Wie ich bereits oben schrieb, einfach Quicksort erweitern.

:shock: Es sei denn, ich bin jetzt total auf dem Schlauch.
 
B

Beni

Gast
Die Kombination der Objekte in den beiden Vectoren zu einem Objekt (wie von Sky vorgeschlagen), hat der "ich" doch als Lösung akzeptiert?

Ein eigener Quicksort schreiben ist total übertrieben!

Ich kann ja noch ein bisschen Quellcode anhängen, um eine Lösungsidee zu verdeutlichen:
Code:
// Die Liste der Doppelelemente, wie von sky vorgeschlagen
// Diese Liste kann mit einer einzigen for-Schleife aus den beiden
// Vectoren erzeugt werden.
List<MyVectorContent> list = ...

// Comparator der nach dem ersten, dann nach dem zweiten
// String vergleicht
Comparator<MyVectorContent> comp = new Comparator<MyVectorContent>(){
  public int compare( MyVectorContent a, MyVectorContent b ){
    int result = a.getString1().compareTo( b.getString1() );
    if( result == 0 )
       result = a.getString2().compareTo( b.getString2() );
    return result;
  }
};

// Die Liste sortieren
Collections.sort( list, comp );

// Die Elemente der Liste könnte man jetzt in die
// beiden Vectoren zurückschreiben...

[Edit]
Man könnte in der Liste auch die Indices speichern (einfach ein paar Integer reinschieben), und der Comparator schaut in den beiden Vectoren nach, was dort steht! Danach wären halt nur die Indices sortiert.

Code:
List<Integer> indices = ... // alle Indices

final Vector<X> vector1 = ...
final Vector<Y> vector2 = ...

Comparator<Integer> comp = new Comparator<Integer>(){
  public int compare( Integer a, Integert b ){
     if( vector1.get( a ) < vector1.get( b ))
       return -1;
     else if( ... == ... ){
       if( vector2.get( a ) < vector2.get( b ) )
         return -1;
       else if ...
       else ...
     }
     else ...
  }
};

Collections.sort( indices, comp );
 
G

Guest

Gast
Beni hat gesagt.:
Die Kombination der Objekte in den beiden Vectoren zu einem Objekt (wie von Sky vorgeschlagen), hat der "ich" doch als Lösung akzeptiert?
...
:autsch: Sorry, der Schlauch ist wieder frei. :wink:
Ich sollte alle Antworten lesen, bevor ich was vorschlage. Klar, ist die elegantere Lösung, wenn die Dinger
schon mal zusammen gehören. Irgendwie habe ich an einen ähnlichen Fall denken müssen, wo ich mehrere
unterschiedliche Listen anhand einer weiteren Liste sortieren musste. Das habe ich mit Quicksort gelöst,
um keine zusatzlichen "Container" für die Daten erstellen zu müssen.
 
I

ich²

Gast
Guten Morgen Forum,

vielen Dank für eure Hilfe, hat wunderbar funktioniert!

mfg

ich²
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ste3et_C0st Vectoren berechnen Java Basics - Anfänger-Themen 8
A Vectoren Java Basics - Anfänger-Themen 10
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
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
B Termine (Datum erstellen), Abhängig von Intervallen Java Basics - Anfänger-Themen 0
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
Zeekay Development Methoden Methoden Inhalt Abhängig vom Objekt? Java Basics - Anfänger-Themen 9
H Combobox abhängig von RadioButton Java Basics - Anfänger-Themen 4
G Objekt Instanziierung von Eingabe abhängig machen Java Basics - Anfänger-Themen 5
G JFreeChart | Plot updaten bei neuem Dataset | wahrscheinlich "Thread-abhängig" Java Basics - Anfänger-Themen 3
V ComboBox Ergebnisse abhängig von anderer ComboBox - Wie? Java Basics - Anfänger-Themen 7
R Anzahl der ineinander verschachtelten for-Schleifen von Variable abhängig machen Java Basics - Anfänger-Themen 5
FetterOtter JTable: ToolTipText-Anzeige abhängig von Zellengröße und Textlänge Java Basics - Anfänger-Themen 2
A Erste Schritte Steuer Berechnung, Alters Abhängig Java Basics - Anfänger-Themen 5
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
D GUI abhängig von den Attributen füllen! Java Basics - Anfänger-Themen 12
A Methodenausführung abhängig von vordefiniertem Wert? Java Basics - Anfänger-Themen 20
M Zeitdifferenz von Ende - sleep(x) - Start von x abhängig Java Basics - Anfänger-Themen 6
M Schleife abhängig von Bedingung Java Basics - Anfänger-Themen 5
D Combobox mit array abhängig von anderer Combobox mit array Java Basics - Anfänger-Themen 4
C JMenuItems abhängig von Datensätzen in der DB Java Basics - Anfänger-Themen 3
G Scalieren eines Bildes, abhängig von der Fenstergröße Java Basics - Anfänger-Themen 10
D Über Button abhängig von Auswahl 2 versch. Fenster öffnen Java Basics - Anfänger-Themen 2
D BlueJ Java: Strings voneinander trennen Java Basics - Anfänger-Themen 11
V Schleifen die nicht voneinander abhängen! (für CAN-BUS) Java Basics - Anfänger-Themen 10
D Zwei Drop downs für voneinander abhängige Bundesländer- und Städteauswahl Java Basics - Anfänger-Themen 9
K Klassen völlig unbhängig voneinander starten. Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben