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!
 
Vectoren kannste mit der sort() sortieren.

Schreib die Methode etwas um, und nimm die getLeitsung() als Kriterium.
 
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?
 
@Heiko
😀

@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;
  }
}
 
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?
 
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.
 
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();
			   
		}
 
@meez
Es gibt da vorgefertige Algorithmen, die besser als ein Insertionsort auf Basis von Arrays sind :wink:

[Edit: wesentlich besser]
 
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...
 
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);
 
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.

Zurück
Oben