hallo sortierung?

Status
Nicht offen für weitere Antworten.

DP

Top Contributor
hallo. ich breche mir gerade die ohren beim sortieren von werten.

ich habe in Vector mit x Beans gefüllt.

jedes Bean hat die methode getLeistung() und liefert einen int zurück.

jetzt will ich den vector nach leistung sortieren.

also das bean mit dem höchsten wert von getLeistung() soll im vector an stelle 0 und das bean mit dem niedrigsten wert von getLeistung() soll im vector an stelle Vector.size()-1 stehen.

so, und nun?

wie sortiere ich dei beans im vector?

vielen dank!
 

Heiko

Bekanntes Mitglied
Vectoren kannste mit der sort() sortieren.

Schreib die Methode etwas um, und nimm die getLeitsung() als Kriterium.
 

DP

Top Contributor
sauber. nun hänge ich am comparator fest. welche 2 werte gebe ich dort zum vergleichen mit? vom aktuellen bean und vom nächsten oder wie?
 
B

Beni

Gast
@Heiko
:D

@DP
Du bekommst einfach zwei Beans vorgeworfen, welche du verglichen sollst. Woher die kommen, muss den Comparator nicht interessieren. Die Implementation wird etwa so aussehen:

Code:
public class BeanComparator implements Comparator{
  compare(Object o1, Object o2) {
    Bean b1 = (Bean)o1;
    Bean b2 = (Bean)o2;

    int l1 = b1.getLeistung();
    int l2 = b2.getLeistung();
    
    if( l1 < l2 )
      return -1;  // oder vielleicht 1
    else if( l1 > l2 )
      return 1; // oder vielleicht -1
    else
      return 0;
  }
}
 

DP

Top Contributor
sorry. versteh ich nicht. entweder nicht mein tag heute oder einfach zu blöd.

also ich habe einen vector mit 3000 beans.

nun schicke ich den vector in Collections.sort() rein und gebe dem neuen comparator 2 werte mit, die verglichen werden sollen.

was ist mit den restlichen 2998 werten?
 

Heiko

Bekanntes Mitglied
DP hat gesagt.:
sorry. versteh ich nicht. entweder nicht mein tag heute oder einfach zu blöd.

also ich habe einen vector mit 3000 beans.

nun schicke ich den vector in Collections.sort() rein und gebe dem neuen comparator 2 werte mit, die verglichen werden sollen.

was ist mit den restlichen 2998 werten?

Der vergleicht immer die beiden nächstliegenden Werte. Das ist eine Schleife. Die höheren/niederigen Werte "wandern" so durch den Vektor bis zu der Stelle, an die sie gehören.
 

meez

Top Contributor
Hast dus etwa so gelöst?

Code:
		public void sort(Vector beans) {
			Vector  sortBeans;
			int leistung1, leistung2;
			sortBeans = new Vector();			
			for (int n=0;n<beans.size();n++) {				
				if (sortBeans.size() < 1)
					sortBeans.add(beans.get(n));
				else {
					leistung1 = ((Bean).beans.get(n)).getListung();
					for2: for (int i=0;i<sortBeans.size();i++) {
						leistung2 = ((Bean).sortBeans.get(n)).getListung();
						if (leistung 1 <= leistung2) {
							sortBeans.insertElementAt(beans.get(n), i-1);
							break for2;
						}
					} 		
			
				}
			}
			beans.clear();
			beans.addAll(sortBeans);
			sortBeans.clear();
			   
		}
 
B

Beni

Gast
@meez
Es gibt da vorgefertige Algorithmen, die besser als ein Insertionsort auf Basis von Arrays sind :wink:

[Edit: wesentlich besser]
 

meez

Top Contributor
Beni hat gesagt.:
@meez
Es gibt da vorgefertige Algorithmen, die besser als ein Insertionsort auf Basis von Arrays sind :wink:

[Edit: wesentlich besser]

;) Ich weiss...Darum frag ich ja, ob ers etwa so gelöst hat...
 

DP

Top Contributor
nö, so:

methode im bean:

Code:
  public int compareTo(Object o)
  {
    try
    {
      long leistung_me = new Long(getLeistung()).longValue();
      long leistung_other = new Long( ( (LeistungsBean) o).getLeistung()).longValue();

      if (leistung_me < leistung_other)
      {
        return -1;
      }
      else if (leistung_me > leistung_other)
      {
        return 1;
      }
      else
      {
        return 0;
      }
    }
    catch(Exception e)
    {
      e.printStackTrace();
      return 0;
    }
  }

und den vectpr schmeisse ich so rein:

Code:
Collections.sort(v);
 

akira

Bekanntes Mitglied
Hi,

Du könntest das noch kürzer schreiben:

Code:
public int compareTo(Object o) 
  { 
    try 
    { 
      long leistung_me = new Long(getLeistung()).longValue(); 
      long leistung_other = new Long( ( (LeistungsBean) o).getLeistung()).longValue(); 
      
      return leistung_me  - leistung_other;
    } 
    catch(Exception e) 
    { 
      e.printStackTrace(); 
      return 0; 
    } 
  }

Es muß nämlich nicht unbedigt 1 oder -1 zurückgegeben werden, sondern lediglich ein positiver oder negativer Wert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
H Collections Aktuellen Index generell und nach Sortierung ausgeben Allgemeine Java-Themen 6
N Sortierung Allgemeine Java-Themen 8
R Frage zur topologischen Sortierung Allgemeine Java-Themen 2
S Alphabetische sortierung mit Quicksort Allgemeine Java-Themen 10
J Sortierung in Array Allgemeine Java-Themen 9
J Array Sortierung auf andere Arrays anwenden Allgemeine Java-Themen 6
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
isowiz java.util.List: Sortierung nicht nach bestimmten Attribut? Allgemeine Java-Themen 4
S Bei Sortierung Speicher zu gering? Allgemeine Java-Themen 8
K Sortierung, Collator und Case Allgemeine Java-Themen 5
T Hashmap füllen mit rs sortierung Allgemeine Java-Themen 9
B Sortierung einer ArrayList mit Comparator Allgemeine Java-Themen 6
A ArrayList Sortierung rumdrehen Allgemeine Java-Themen 3
T Sortierung mit Collections.sort() Allgemeine Java-Themen 4
N Sortierung eines TreeSets kann zerstört werden?? Allgemeine Java-Themen 3
F Algorithmus für Sortierung gesucht Allgemeine Java-Themen 15
S Sortierung einer Collection nach dem Attribut "name&quo Allgemeine Java-Themen 3
A Datenstruktur und Sortierung Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben