Vector mit Objekten sortieren

Status
Nicht offen für weitere Antworten.
J

JavaJay

Gast
Hallo

Also irgendwie komme ich mit dem Sortieren von Objekten in einem Vector nicht klar.

Also folgendes:

Ich habe einen Vector der Objekte speichert. Ein Objekt besteht aus 6 verschiedenen Strings.
Objekt:
String frima, name, vorname, tel, fax... usw.

So wie bekomme ich diesen Vektor jetzt sortiert? Ich bekomme es einfach nicht hin.

Hier mal mein Codeauszug

Code:
...
public int compareTo(contactObj a, contactObj b){
    return ((String) a.getFirma()).compareTo(((String) b.getFirma()));
  }

  public void sortActionPerformed(ActionEvent evt) {
    for (int i = 0; i < v.size(); i++){
      contactObj ai = (contactObj) v.get(i);
      for(int j = 0; j < v.size() - 1; j++){
        contactObj aj = (contactObj) v.get(j);
        compareTo(ai, aj);
        Collections.sort(v, compareTo());
      }
    }
 }
...

Hab auch schon die Suche benutzt. Steig bei vielem aber auch nicht wirklich durch.

Bitte um Hilfe :)
 
J

JavaJay

Gast
Ach so ich benötige da garkeine Schleife!?

Hmm ok dann hab ich etwas falsch gedacht.

OK ich probiere mich mal. Danke schonmal für die Hilfe

Melde mich wenn es nicht klappt.
 
G

Guest

Gast
Super vielen Dank für deine Hilfe

Ich hab es hinbekommen.

Hab also einfach nur das mit der Schleife und dem Comarator falsch verstanden.
 

André Uhres

Top Contributor
Nur so ne Idee: was haltet ihr von einer SortKey?
Das hat natürlich den Nachteil, daß es mehr Speicherplatz braucht, aber ich find's irgendwie übersichtlicher
und der Comparator wird ja dann auch unabhängiger vom Objekt (als Beispiel hier die Person):
Code:
...
        Collections.sort(vector, new Comparator<Person>() {
            public int compare(Person p1, Person p2) {
                return p1.getSortKey().compareTo(p2.getSortKey());
            }
        });
...
class Person{
    private String vorn, name, firm, sKey;
    final private String SP = "                              ";
    public Person(final String vornP, final String nameP, final String firmP){
        if(vornP==null || nameP==null || firmP==null) 
            throw new NullPointerException();
        if(vornP.length()>SP.length() || nameP.length()>SP.length() || firmP.length()>SP.length())
            throw new IllegalArgumentException();
        vorn = vornP;
        name = nameP;
        firm = firmP;
        sKey = buildSortKey();
    }
    public String getFirma()   {return firm;}
    public String getName()    {return name;}
    public String getVorname() {return vorn;}
    public String getSortKey() {return sKey;}
    public String toString()   {return firm+"_"+name+"_"+vorn;}
    private String buildSortKey() {
        StringBuilder buildKey = new StringBuilder();
        buildKey.append(firm);
        buildKey.append(SP.substring(firm.length()));
        buildKey.append(name);
        buildKey.append(SP.substring(name.length()));
        buildKey.append(vorn);
        buildKey.append(SP.substring(vorn.length()));
        return buildKey.toString();
    }
}
 
G

Guest

Gast
André Uhres hat gesagt.:
Nur so ne Idee: was haltet ihr von einer SortKey?
Das hat natürlich den Nachteil, daß es mehr Speicherplatz braucht, aber ich find's irgendwie übersichtlicher
und der Comparator wird ja dann auch unabhängiger vom Objekt (als Beispiel hier die Person):
Dann doch lieber Comparable implementieren (gleicher Aufwand, ohne die Datenmenge zu verdoppeln).
Möchte man aber nach verschiedenen Kriterien sortieren, sind Comparatoren ausserhalb der Klasse besser.
 

semi

Top Contributor
André Uhres hat gesagt.:
Anonymous hat gesagt.:
..Möchte man aber nach verschiedenen Kriterien sortieren, sind Comparatoren ausserhalb der Klasse besser.
Man kann ja auch verschiedene SortKeys anlegen.
Hallo,

genauso könnte man mehrere Comparatoren implementieren. Der Aufwand bleibt gleich, die Datenmenge
wird aber nicht verlielfacht, nur für den Fall, dass man irgendwo Vergleichmöglichkeiten braucht.
Ich persönlich würde es lieber trennen.

PS: Ich war der Gast da oben.

Gruß,
Michael
 

André Uhres

Top Contributor
semi hat gesagt.:
..Der Aufwand bleibt gleich..
Je mehr ich darüber nachdenke, desto mehr schwinden die "Vorteile" einer einer SortKey :)
An Performanz gewinnt man wahrscheinlich auch nichts.
Naja, die Väter von Java haben sich das schon gut ausgedacht :D
 

semi

Top Contributor
André Uhres hat gesagt.:
semi hat gesagt.:
..Der Aufwand bleibt gleich..
Je mehr ich darüber nachdenke, desto mehr schwinden die "Vorteile" einer einer SortKey :)
An Performanz gewinnt man wahrscheinlich auch nichts.
Naja, die Väter von Java haben sich das schon gut ausgedacht :D
Wer sagt, dass es Väter waren? :D

Übrigens, man könnte es auch per Reflection machen (sieht aber sch... aus ;))

Verwendung
Code:
Collections.sort(personList, new GenericComparator( Person.class, new String[] { "nachname", "vorname" }));
Collections.sort(adressList, new GenericComparator( Adresse.class, new String[] { "ort", "strasse" }));

Implementierung (so auf die Schnelle zusammengetippt, Fehler nicht ausgeschlossen und Code potthässlich :wink: )
Code:
   class GenericComparator<TValueType> implements Comparator<TValueType>
   {
      private Method getterList[];
      
      public GenericComparator(Class<TValueType> clazz, String properties[])
      {
         getterList = new Method[properties.length];
         try
         {
            // TODO: Code zu hässlich
            BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
            PropertyDescriptor props[] = beanInfo.getPropertyDescriptors();
            int i=0;
            for(String property : properties)
            {
               for(PropertyDescriptor descriptor : props)
               {
                  if(descriptor.getName().equals(property))
                  {
                     getterList[i++] = descriptor.getReadMethod();
                     break;
                  }
               }
               // TODO: Wenn Property nicht gefunden wird, laut schreien
            }
         }
         catch (IntrospectionException e)
         {
            // TODO: e.printStackTrace() ist keine Fehlerbehandlung 
            e.printStackTrace();
         }
      }

      @SuppressWarnings("unchecked")
      public int compare(TValueType v1, TValueType v2)
      {
         int result = 0;
         
         for(Method getter : getterList)
         {
            try
            {
               // TODO: ACHTUNG! Hier gehe ich davon aus, dass alles Comparable ist und nicht null!
               result = ((Comparable)getter.invoke(v1, (Object[])null)).compareTo(getter.invoke(v2, (Object[])null));
            }
            catch (IllegalArgumentException e)
            {
               // TODO: e.printStackTrace() ist keine Fehlerbehandlung
               e.printStackTrace();
            }
            catch (IllegalAccessException e)
            {
               // TODO: e.printStackTrace() ist keine Fehlerbehandlung               
               e.printStackTrace();
            }
            catch (InvocationTargetException e)
            {
               // TODO: e.printStackTrace() ist keine Fehlerbehandlung               
               e.printStackTrace();
            }
            
            if(result != 0)
            {
               break;
            }
         }
         
         return result;
      }
   }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Array von Vector oder ArrayList Objekten Java Basics - Anfänger-Themen 8
M Vector mit mehreren Objekten Java Basics - Anfänger-Themen 8
G aus Vector mit "unbekannten" Objekten lesen Java Basics - Anfänger-Themen 11
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
P Objekte in Vector werden überschrieben Java Basics - Anfänger-Themen 4
P Array in Vector speichern Java Basics - Anfänger-Themen 2
E Methoden new Vector().add(x).add(x); ? Java Basics - Anfänger-Themen 5
F Vector istGeordnet Java Basics - Anfänger-Themen 15
R Vector-Filterfunktion Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
J Vector Manipulieren.. Wie? Java Basics - Anfänger-Themen 16
M Vector eines Vectors einzeln ausgeben Java Basics - Anfänger-Themen 9
K String kommt schon in Vector vor? Java Basics - Anfänger-Themen 36
J Erzeugung eines Vector-Objekts - Frage zum Typ Java Basics - Anfänger-Themen 3
H Zugriff auf Vector Element Java Basics - Anfänger-Themen 2
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
A Author in Vector Java Basics - Anfänger-Themen 22
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
K Collections Vector zu String casten Java Basics - Anfänger-Themen 4
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20
B Globale vector? Java Basics - Anfänger-Themen 7
E 2 Dimensionaler Vector Java Basics - Anfänger-Themen 5
T Map<String, Vector>? Java Basics - Anfänger-Themen 11
P Collections Vector füllen in for-Schleife Java Basics - Anfänger-Themen 3
J Vector Addition Java Basics - Anfänger-Themen 5
M 2D Vector Java Basics - Anfänger-Themen 2
N IndexOutOfBoundsException: Source does not fit in dest beim Kopieren von ArrayList in Vector Java Basics - Anfänger-Themen 4
M Umwandlung von Array in Vector und umgekehrt Java Basics - Anfänger-Themen 6
E Datentypen Klasse Vector aus der Standard-API anwenden Java Basics - Anfänger-Themen 7
D Klasse Vector entwerfen Java Basics - Anfänger-Themen 7
A Arrays vs Liste vs Vector Java Basics - Anfänger-Themen 30
H in for Schleife über Vector iterieren Java Basics - Anfänger-Themen 2
S Datentypen Vector auslesen Java Basics - Anfänger-Themen 12
yampi Objektsammlung - Hashtable, Vector, Arrays Java Basics - Anfänger-Themen 8
T Vector-Positin anzeigen Java Basics - Anfänger-Themen 3
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
C Datentypen Probleme mit Vector.contains() Java Basics - Anfänger-Themen 10
M Datentypen function(Vector<SuperClass>), Vector<Subclass> Java Basics - Anfänger-Themen 6
L Vector Sortieren Java Basics - Anfänger-Themen 8
B Vector in Table ersetzen Java Basics - Anfänger-Themen 4
B Werte einer Spalte aus DB in einen Vector schreiben Java Basics - Anfänger-Themen 15
kitz Telefonbuch (Vector) Java Basics - Anfänger-Themen 17
E Arraylist mit Daten aus Vector füllen Java Basics - Anfänger-Themen 7
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
F Vector wird überschrieben Java Basics - Anfänger-Themen 8
T Vector sortiern Java Basics - Anfänger-Themen 7
C Frage zu Vector und muliplizieren des Inhaltes Java Basics - Anfänger-Themen 2
S Vector von eigenen Klassen Java Basics - Anfänger-Themen 2
J Collection Vector Java Basics - Anfänger-Themen 8
Streeber ArrayList/Vector, mehrdimensional Java Basics - Anfänger-Themen 11
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
babel Einen Vector/Liste mit Daten prüfen Java Basics - Anfänger-Themen 31
B Hilfe zum einem Problem mit Vector Java Basics - Anfänger-Themen 8
H Vector - Fehler? Java Basics - Anfänger-Themen 2
babel einen Vector nach Datum sortieren Java Basics - Anfänger-Themen 21
T Array-Vector Problem Java Basics - Anfänger-Themen 18
P Vector und Exception Java Basics - Anfänger-Themen 7
K Vector Java Basics - Anfänger-Themen 3
K Vector Java Basics - Anfänger-Themen 10
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
T Object aus Vector übergeben Java Basics - Anfänger-Themen 2
B Vector<Point> als Rückgabewert Java Basics - Anfänger-Themen 23
L Vector einem Array hinzufügen Java Basics - Anfänger-Themen 14
P Vector mit double Java Basics - Anfänger-Themen 3
P Vector Elemente auslesen Java Basics - Anfänger-Themen 9
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
W Vector mit String[] auslesen Java Basics - Anfänger-Themen 4
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
B Dopplete aus Vector entfernen Java Basics - Anfänger-Themen 8
E Vector Fehler bei allen Methoden von Vector Java Basics - Anfänger-Themen 2
K Vector zu Array machen Java Basics - Anfänger-Themen 10
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
L Multidimensional Vector - Recordset Java Basics - Anfänger-Themen 5
K Objektklasse mit leerem Vector füllen Java Basics - Anfänger-Themen 6
K Vector wird überschrieben Java Basics - Anfänger-Themen 7
G Vector Strijng parsen Java Basics - Anfänger-Themen 6
K vector cannot be resolved Java Basics - Anfänger-Themen 3
G Zeichenkette suchen in Vector-Klasse Java Basics - Anfänger-Themen 11
R fehler beim incrementellen schreiben in einen vector Java Basics - Anfänger-Themen 11
M ObjectInputStream, Object und Vector<Object> Java Basics - Anfänger-Themen 4
G Vector, equal & Casts Java Basics - Anfänger-Themen 5
N Objekte in einen Vector packen oder nicht? Java Basics - Anfänger-Themen 3
D Frage zu Vector Java Basics - Anfänger-Themen 7
S Problem mit Vector Java Basics - Anfänger-Themen 2
G Object[] [] nach vector casten. Java Basics - Anfänger-Themen 3
G 2D vector zugriff auf elementinterne elemente wie Java Basics - Anfänger-Themen 3
G vector in neuem vector sortieren Java Basics - Anfänger-Themen 3
G jede 2te zeile in vector leer einfügen, wie? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben