Die Objekte eine ArrayList sortieren

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Code:
final Point point=new Point("Punkt",10,20,30,40);
		final Linie linie=new Linie("Linie",20,5,10);
		final Sphere sphere=new Sphere("Kugel",30,3,1,"gelb");
		final Triangle triangle=new Triangle("Dreieck",40,50,-25,-40,"pink");
		
		
		
         // Consctrucion of an ArrayList
		 final ArrayList c = new ArrayList();
		
		c.add(point);		
		c.add(linie);
		c.add(sphere);
		c.add(triangle);

Hier habe ich meine Objekte erzeugt und in meine ArrayList gespeichert. Nun möchte ich gerne die Liste sortieren nach Namen zum Beispiel wie kann man das am besten Lösen ? Collections.sort(c) geht ja nicht weil ich keine einzelnen Strings habe sondern Objekte eingefügt. Wäre für jede Hilfe dankbar.
 

The_S

Top Contributor
Doch, das geht. Du musst nur einen eigenen Comparator programmieren, oder deine Klassen Comparable implementieren lassen.
 
G

Guest

Gast
Was ist denn der Unterschied zwischen Comperator und Comparable?
 

The_S

Top Contributor
Comparator ist eine eigene Klasse, die du z. B. dann verwenden kannst, wenn du die zu sortierenden Klassen nicht bearbeiten kannst, und Comparable ist ein interface, das direkt von der zu sortierenden Klasse implementiert wird.
 

Oli

Top Contributor
Beispiel:


Code:
public class Linie implements Comparable {

... dein code ....

 //muß implementiert werden um Comparable nutzen zu können
 //paramSorter ist der zu vergleichende Wert
 public int compareTo(Object line) {
  return this.paramSorter.compareTo(((Linie) line).paramSorter);
 }
}

Grüße Oli
 
G

Guest

Gast
Würde das so funktionieren?

Code:
Collections.sort(c, new Comparator() {
		    public int compare(Object o1, Object o2) {
		        String name1 = ((Point) o1).getName();
		        String name2 = ((Point) o2).getName();
		        return name2.compareTo(name1);
		        
		    }
		});
 

The_S

Top Contributor
nein, da du in die liste nicht nur "Points" hinzufügst, sondern auch noch ander Klassen (die vermutlich nicht von Point erben ...)
 
G

Guest

Gast
Oli hat gesagt.:
Beispiel:


Code:
public class Linie implements Comparable {

... dein code ....

 //muß implementiert werden um Comparable nutzen zu können
 //paramSorter ist der zu vergleichende Wert
 public int compareTo(Object line) {
  return this.paramSorter.compareTo(((Linie) line).paramSorter);
 }
}

Grüße Oli

Müsste dann jede einzelne Klasse also bei mir Point, Linie usw das Comparable implementieren?
 

The_S

Top Contributor
ja, muss.

Du kannst das Problem lösen, indem du mit "instanceof" überprüfst, um welchen Typ es sich handelt. Dann den entsprechenden Wert ausliest und die Werte vergleichst (beachte, dass auch Objekte unterschiedlicher Klassen miteinander verglichen werden).
 

Landei

Top Contributor
Nebenbei: Wenn du sicher bist, dass du keine Duplikate brauchst (also jedes Objekt nur einmal auftaucht), kannst du auch TreeSet nehmen, das ist dann nämlich immer "automatisch" sortiert. Funktioniert ebenfalls mit Comparable oder Comparator.
 
G

Guest

Gast
So habe jetzt in jede einzelne Klasse dei Methode eingeführt allerdings steh ich grad am Schlauch wie kann ich denn jetzt die ArrayList so aufrufen das sie sortiert erscheint ?
 
G

Guest

Gast
wenn ich das mache bekomme ich als Fehler : Point cannot be cast to java.lang.Comparable
 

HLX

Top Contributor
Der Inhalt deine Liste muss das Interface "java.lang.Comparable" implementieren.

Falls du statt Comparable einen Comparator verwendest lautet der Aufruf:
Collections.sort(deineArrayListe,deinComparator);
 
M

Michael...

Gast
Ich würde in dem Fall eine Superklasse für die geom. Objekte schreiben und dann die Klassen Point, Linie, usw. davon ableiten.
Die Superklasse stellt so allg. Methoden wie getName() zur Verfügung. Zum Sortieren kann man dann den Weg über einen Comparator gehen, in dem man nur auf die Superklasse casten muss. Das hätte dann auch den Vorteil, dass Du später eventuell auch ein Object Pyramide, das von der Superklasse erbt, in der Liste aufnehmen kannst, ohne dich um die Sortierung zu kümmern.
 
G

Guest

Gast
Die einzelnen Klassen wie Point , Linie usw implementieren Comparable nur meine Klasse in der die Main Methode ist nicht muss sie das auch?
 
M

Michael...

Gast
Hier mal ein Bsp. wie ich das gemeint habe mit der Superklasse, man könnte das auch mit einem Interface machen, keine Ahnung was da besser ist. Ich denke so ist das auf jeden Fall sauberer, als wenn Deine gesamten Point, Linie, ... Klassen Comparable implementieren.
Code:
import java.util.*;

public class CompareDemo {
	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.add(new Punkt("F_Punkt"));
		list.add(new Punkt("Z_Punkt"));
		list.add(new Linie("H_Linie"));
		list.add(new Punkt("A_Punkt"));
		list.add(new Linie("F_Linie"));
		list.add(new Linie("C_Linie"));
		
		System.out.println("Liste vor dem Sortieren:");
		for (int i=0; i<list.size(); i++)
			System.out.println(((GeometrieObjekt)list.get(i)).getName());
		
		Collections.sort(list, new NameComparator());
		System.out.println("Liste nach dem Sortieren:");
		for (int i=0; i<list.size(); i++)
			System.out.println(((GeometrieObjekt)list.get(i)).getName());
	}
}

class GeometrieObjekt {
	private String name;
	public GeometrieObjekt(String name) {
		this.name = name;
	}
	public String getName() {
		return this.name;
	}
}

class Punkt extends GeometrieObjekt {
	public Punkt(String name) {
		super(name);
	}
}

class Linie extends GeometrieObjekt {
	public Linie(String name) {
		super(name);
	}
}

class NameComparator implements Comparator {
	public int compare(Object object1, Object object2) {
		String name1 = ((GeometrieObjekt)object1).getName();
		String name2 = ((GeometrieObjekt)object2).getName();
		return name1.compareTo(name2);
	}
}
 
G

Guest

Gast
ich habe meine Klassen Linie usw Comparable implementiert

und habe diese Funktion :

Code:
public int compareTo(Object line) {
		  return this.name.compareTo(((Linie) line).name);
		}

Als Fehler erhalte ich beim Aufruf von Collections.sort(c) :

Objektverwaltung.Linie cannot be cast to Objektverwaltung.Point

Was mach ich falsch ?
 
M

Michael...

Gast
Das liegt daran, dass Du einen Point in eine Linie casten willst.
Aus dem Grund habe ich ja oben gemeint, dass das mit dem Implementieren von Comparable ist in diesem Fall nicht so sauber ist. Mit der Vorgehensweise muss man immer eine Fallunterscheidung machen. Mit einer Superklasse (s. mein Bsp) oder einem geeigneten Interface kann man sich das ganze Sparen und kann zukünftig die Liste um neue Objekte erweitern.
 
G

Guest

Gast
also gibt es mit meiner Methode keine Möglichkeit das zu lösen?
 
G

Guest

Gast
Meine Klassen erben schon von einer anderen Klasse die Funktionen da ich die Funktionen dort ausgelagert habe und Mehrfachvererbung ist in Java nicht möglich :(
 
M

Michael...

Gast
Anonymous hat gesagt.:
also gibt es mit meiner Methode keine Möglichkeit das zu lösen?
Doch. Es gibt immer eine Möglichkeit, nur gibt es besser und schlechtere ;-)
z.B. könntest Du wie bereits erwähnt eine Fallunterscheidung in Deine compareTo Methoden einbauen.
Code:
public int compareTo(Object object) {
    if (line instanceof Linie)
        return this.name.compareTo(((Linie)object).name);
    if (line instanceof Point)
        return this.name.compareTo(((Point)object).name);
    if (line instanceof Hurz)
        return this.name.compareTo(((Hurz)object).name);
    if (line instanceof ???)
        return this.name.compareTo(((???)object).name);
    ...
}
Das ganze funktioniert ist aber nicht unbedingt so toll, wie bereits erläutert.
Wenn mein Bsp. mit Vererbung nicht funktioniert, kann man das - wie von Oli angemerkt- auch über ein Interface lösen.
 
M

Michael...

Gast
return this.name.compareTo(((Linie)object).name);
liefert doch int, oder von welchem Rückgabewert sprichst Du?
 

ARadauer

Top Contributor
So habe jetzt in jede einzelne Klasse dei Methode eingeführt allerdings steh ich grad am Schlauch wie kann ich denn jetzt die ArrayList so aufrufen das sie sortiert erscheint ?
von einer gemeinsamen klasse erben oder ein interface implementieren.... das ist ein typisches vererbungsbeispiel, polymorphie usw...

Du kannst das Problem lösen, indem du mit "instanceof" überprüfst, um welchen Typ es sich handelt.
kann man, is aber unflexible...

Code:
import java.util.ArrayList;
import java.util.Collections;


public class Test {
   
   public static void main(String[] args) {
      
      ArrayList<Form> formen = new ArrayList<Form>();
      formen.add(new Kreis("Kreis1"));
      formen.add(new Linie("Linie2"));
      formen.add(new Kreis("Kreis2"));
      formen.add(new Linie("XXX"));
      
      Collections.sort(formen);
      
      for(Form f: formen){
         System.out.print(f.getName()+" :");
         f.zeichneDich();
      }
      
   }
   

}

abstract class Form implements Comparable<Form>{   
   private String name;
   

   public Form(String name) {
      super();
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   
   @Override
   public int compareTo(Form o) {
     return getName().compareTo(o.getName());
   }
   
   public abstract void zeichneDich();
   
   
}

class Kreis extends Form{
   public Kreis(String name) {
      super(name);
   }

   String name;

   @Override
   public void zeichneDich() {
     System.out.println("zeichne Kreis");
      
   }   
}


class Linie extends Form{
   public Linie(String name) {
      super(name);
    }

   String name;

   @Override
   public void zeichneDich() {
      System.out.println("zeichne Linie");
      
   }   
}
naja...
 
G

Guest

Gast
Also zur besseren Übersich zeige ich mal meinen kompletten Quellcode was ich eigentlich vorhabe :)

Code:
package Objektverwaltung;
import java.io.*;
import java.util.Scanner;


public class Linie extends Objekteverwaltung implements Serializable {

	/**
	 * @param args
	 */
	// The Start and End Point of the Line
	protected int A_Punkt;
	protected int E_Punkt;
	public Linie(String name,int ID,int A_Punkt,int E_Punkt){
		setName(name);
		setID(ID);
		setA_Punkt(A_Punkt);
		setE_Punkt(E_Punkt);
		
	}
	
	
public void setName(String name){
	this.name=name;
}
public String getName(){
	return name;
}
public void setID(int ID){
	this.ID=ID;
}
public int getID(){
	return ID;
}
public void setA_Punkt(int A_Punkt){
	this.A_Punkt=A_Punkt;
}
public int getA_Punkt(){
	return A_Punkt;
}
public void setE_Punkt(int E_Punkt){
	this.E_Punkt=E_Punkt;
	}
public int getE_Punkt(){
	return E_Punkt;
}
	
	public String toString(){
		return "Objekt:"+name+" "+"ID:"+ID+" "+"Koordinaten:"+A_Punkt+" "+E_Punkt;
	}
	
}

So das ist die Klasse Linie mit Gettern und Settern die anderen Klassen der Objekte sehen genauso aus dann :

Code:
import java.util.*;

public class Objekteverwaltung {
       
       
                protected  int ID;
                protected  String name;       
                  
                
                
               public static void hinzufügen(List list){
            	   list.add(list);
            	   System.out.println(list);
               }
               // Einzelnes Hinzufügen einzelner Objekte
               // -------------- für Aufgabe 3 ---------
               public static void hinzufügen1(List list,Object o){
            	   list.add(o);
            	   System.out.println(o+" wurde in Liste gespeichert");
               }
               
                // Suchfunktion für Array Liste anhand ID
                public static void suchen(List list,Sphere sphere){
                                               
                        Iterator it1=list.iterator();
                        while(it1.hasNext()){
                        it1.next();
                       
                        if(sphere.getID()==30){
                                list.remove(sphere);
                               
                       
                                System.out.println("Das Objekt " +sphere+" wurde gefunden");
                                  break;     
                        }
                        else{
                               
                                System.out.println("Das Objekt mit der ID wurde nicht gefunden");
                                // break für direkten Schleifenabbruch 1 malige Ausgabe 
                                break;
                        }
                }
                }
                // Löschfunktion für Array Liste
                public static void löschen(List list,Point point){
                        
                        Iterator it=list.iterator();
                        while (it.hasNext()){       
                        Object o=it.next();
                   
                        if(point.getID()==10){
                        list.remove(o);
                                                               
                   
                        System.out.println("Objekt mit der ID "+point.getID()+" wurde gelöscht,"
                                          +" Restlist ist:"+list);
                       }
                       else{
                               list.remove(o);
                               System.out.println("Das Objekt mit der ID wurde nicht gefunden");
                               // Schleifenabbruch 
                               break;
                      }
                   }
                }
                // Filterfunktion auf Liste angewendet
                public static void filtern(List list,Linie linie){
                	Iterator it2=list.iterator();
			        while(it2.hasNext()){
			        	Object o=it2.next();
			        	if(list.contains(linie)){
			        		list.remove(o);
			        		System.out.println("Die Liste enthält ein "+list.get(0));
			        	}
			        		else{
			        			System.out.println("Das Objekt ist nicht vorhanden");
			        			break;
			        	}
			        }
                }
}
Das ist jetzt die Klasse in der nur Funktionen geschrieben sind die von meiner Main Klasse die jetzt folgt geerbt werden !!!


Code:
import java.io.*;
import java.util.*;

import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;
public class Kontrolle extends Objekteverwaltung {
	
	private ArrayList c1;
	/**
	 * @author Stephan Trapp
	 */
	
    
	public static void main(String[] args) {
        // Objects construction
		Point point=new Point("Punkt",10,20,30,40);
		Linie linie=new Linie("Linie",20,5,10);
		Sphere sphere=new Sphere("Kugel",30,3,1,"gelb");
		Triangle triangle=new Triangle("Dreieck",40,50,-25,-40,"pink");
		
		
		
         // Consctrucion of an ArrayList
		ArrayList c = new ArrayList();
		
		c.add(point);		
		c.add(linie);
		c.add(sphere);
		c.add(triangle);
		
		

		
	boolean ende=false;
	mainMenü: while(ende==false){
	    // Printing of the "Objektverwaltung" with Switch Construct
		System.out.println("Die Objekteverwaltung von Grafiken");
		System.out.println("=================================="+
				           "==================================");
		System.out.println("\nHauptmenue");
		System.out.println("\n(1) Objekte in Datei schreiben");
		System.out.println("(2) Objekte auslesen");		
		System.out.println("(3) Objekte suchen");
		System.out.println("(4) Objekt loeschen");
		System.out.println("(5) Objekte filtern");
		System.out.println("(6) Objekte hinzufügen");
		System.out.println("\n(0) Programm beenden");
		try{
			System.out.println("\nAuswahl: ");
			Scanner eingabe=new Scanner(System.in);
			int auswahl=eingabe.nextInt();
			
			switch(auswahl){
			
            //	Fall 1 Objekte in Datei schreiben
			
			case 1: System.out.println("\n Objekt werden angelegt...");
                    
                    
			        try{
			        	// Serialisiert Objekt und legt ArrayList und Eingabe in Datei
			        	FileOutputStream fos = new FileOutputStream("test.txt");
						ObjectOutputStream oos = new ObjectOutputStream(fos);
						
		        		// Schreibt ArrayList in Datei
		        		
		        		oos.writeObject((ArrayList) c);
		        		System.out.println(c);
					    						
					    System.out.println("ArrayList wurde in Datei gespeichert");
					    oos.close();
					    }
			        
			        
			        
			catch(IOException e){
				e.printStackTrace();
			}
					
			break;
             //	 Fall 2 Liest aus ArrayList
			case 2:  System.out.println("Objekte laden...");
			       	        	        
	        
	        	 try{
	        		 FileInputStream in=new FileInputStream("test.txt");
	        		 ObjectInputStream in1=new ObjectInputStream(in);
	        		
	        		 c=(ArrayList)in1.readObject();
	        		 System.out.println(c.toString());
	        		 in1.close();
	        		 
	        	 }	 
	        catch(FileNotFoundException e){
	        	System.out.println("Datei nicht gefunden");
	        }
	        break;
			// Fall 3 Objekt anhand ID suchen	
			case 3: suchen(c,sphere);
				    				
				break;
				
			// Fall 4  Objekte Anhand ID in der ArrayList löschen
			case 4:   löschen(c,point); 
				       				       				     				            
			break;
			
			// Fall 5 Objekte nach Namen filtern
			
			case 5: filtern(c,linie);
			
			break;
			// Fall 6 Objekte zur ArrayList hinzufügen
			
			case 6: System.out.println("Objekt anlegen...");
			        try{
			        	System.out.println("\nBitte wählen Sie: ");
			        	System.out.println("(1) für Sphere");
			        	System.out.println("(2) für Point");
			        	System.out.println("(3) für Linie");
			        	System.out.println("(4) für Triangle");
			        	System.out.println("(5) Hauptmenü");
			        	System.out.println(" Nummer eingeben :");
			        	
						Scanner eingabe1=new Scanner(System.in);
						int auswahl1=eingabe1.nextInt();
						switch(auswahl1){
						case 1: hinzufügen1(c,sphere);
						break;
						case 2: hinzufügen1(c,point);
						break;
						case 3: hinzufügen1(c,linie);
						break;
						case 4: hinzufügen1(c,triangle);
						break;
						case 5:   break;
						}}
			        catch(Exception e){
				    e.printStackTrace();
			        }
			        
			break;
			// Fall 0 Exit Program
			case 0: System.out.println("\nProgramm wurde beendet");
			ende=true;
			break;
			default: System.out.println("\nEingabe existiert nicht");
			
			
			}}
		catch(Exception e){
			System.out.println("");
		}
		 
		
		}
	}}
 

ARadauer

Top Contributor
Code:
public class Linie extends Objekteverwaltung
deine Linie ist also eine Objekteverwaltung? warum?
ist ein hund und eine tierhandlung?

"Generalisierung" ich habe Eigenschaften und Methoden gemeinsam somit leite ich meine Klassen von anderen Klassen ab....

warum leitest du von Objektverwaltung ab? ich würde das nicht machen, dann kannst du deine formen von einer gemeinsamen abstrakten klasse ableiten... was du aber nicht muss, du kannst ja auch interfaces verwenden
 
G

Gast

Gast
Andreas Adenauer hat wieder Recht... Man könnte ja noch verstehen, wenn die Klasse Objektverwaltung instanzen von Linie verwalten würde.
 
G

Guest

Gast
Ja der Name "Objekteverwaltung" hab ich wohl ein wenig falsch gewählt es sollen ja nur die Methoden geerbt werden die ich darin habe ;) und zum Thema warum eine Objekteverwaltung für Linien usw? Die Eigenschaften der ZeichenObjekte sollen einfach nur gespeichert werden so ähnlich wie eine Benutzerverwaltung Daten speichert nur halt diesmal mit den Eigenschaften von Zeichenobjekten.
 
G

Guest

Gast
zum Sortieren hab ich das jetzt so gemacht :

Code:
List c = new ArrayList();
				
		c.add(point.toString());		
		c.add(linie.toString());
		c.add(sphere.toString());
		c.add(triangle.toString());

                                Iterator it1 = c.iterator();
				while (it1.hasNext ())
				System.out.println ((String) it1.next ());
				System.out.println("---");
				//Sortierte Ausgabe
				Collections.sort(c);
				it1 = c.iterator();
				while (it1.hasNext ())
				System.out.println((String)it1.next());


Funktioniert ja schön und gut allerdings will ich auch mal gerne wissen wie ich es mit einem Comparator schaffe :(
 

ARadauer

Top Contributor
Ja der Name "Objekteverwaltung" hab ich wohl ein wenig falsch gewählt es sollen ja nur die Methoden geerbt werden die ich darin habe
ich finde der name passt, schon hinzfügen, löschen... verwalten halt..

warum eine Objekteverwaltung für Linien usw
ich würd mir die vererbung nochmal ansehen, du verwechselst da was. eine linie ist bei dir eine Objekteverwaltung. so wie ein hund ein tier ist. es geht bei der vererbung niciht darum, dass die linie die methoden von Objekteverwaltung benutzen kann, sondern das linie die methoden selber hat.

tier kann springen, hund kann springen,
ein hund kann zu einer tierhandlung hinzugefügt werden, aber deswegen braucht der hund diese methode nicht...

Die Eigenschaften der ZeichenObjekte sollen einfach nur gespeichert werden so ähnlich wie eine Benutzerverwaltung Daten speichert nur halt diesmal mit den Eigenschaften von Zeichenobjekten
geht schon in die richtige richtung. die daten halten die linien usw.. selber und diese objekte können in der Objekteverwaltung verwalltet werden, aber dieswegen müssen sie nicht davon erben...

also langer rede kurzer sinn: deine formen nicht von Objekteverwaltung erben lassen....
extends Objekteverwaltung .... raus damit
 

ARadauer

Top Contributor
Comperator vs Comparable
Comperator: du hast eine Klasse die fürs Sortieren zuständig ist und weiß welches objekt jetzt größer ist
Comparable: die objekte sind vergleichbar, ein objekt weiß selber wenn es größer ist..


schau dir das mal ganz genau an, da ist auch die sache mit der vererbung drin, schau meine linie leitet nicht von der verwaltung ab...
Code:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;


public class Test {
   
   public static void main(String[] args) {
      
      Objectverwaltung verwaltung = new Objectverwaltung();
      
      verwaltung.addForm(new Kreis("Kreis1"));
      verwaltung.addForm(new Linie("Linie2"));
      verwaltung.addForm(new Kreis("Kreis2"));
      verwaltung.addForm(new Linie("XXX"));
      
      verwaltung.sortieren();
      verwaltung.ausgeben();
   }
   

}

class FormComperator implements Comparator<Form>{

   @Override
   public int compare(Form o1, Form o2) {
     return o1.getName().compareTo(o2.getName());
   }
   
}

class Objectverwaltung{
   ArrayList<Form> formen;
   public Objectverwaltung() {
       formen = new ArrayList<Form>();
   }
   
   public void addForm(Form f){
      formen.add(f);
   }
   
   public void sortieren(){
      Collections.sort(formen); //wenn wir das so machen, kannst du dir den Comperator sparen
   }
   
   
   public void sortierenMitComperator(){
      Collections.sort(formen, new FormComperator()); //wenn wir das so machen, kannst du dir das Comparable sparen
   }
   
   
   public void ausgeben(){
      for(Form f: formen){
         System.out.print(f.getName()+" :");
         f.zeichneDich();
      }
   }
   
   public Form suchen(String wasweisich){
     //....
      return null;
   }
   
   public void remove(Form f){
      //...
   }
   
}

abstract class Form implements Comparable<Form>{   
   private String name;
   

   public Form(String name) {
      super();
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   
   @Override
   public int compareTo(Form o) {
     return getName().compareTo(o.getName());
   }
   
   public abstract void zeichneDich();
   
   
}

class Kreis extends Form{
   public Kreis(String name) {
      super(name);
   }

   String name;

   @Override
   public void zeichneDich() {
     System.out.println("zeichne Kreis");
      
   }   
}


class Linie extends Form{
   public Linie(String name) {
      super(name);
    }

   String name;

   @Override
   public void zeichneDich() {
      System.out.println("zeichne Linie");
      
   }   
}
 
G

Guest

Gast
ach sooo ich verstehe ich brauche die Funktionen garnicht zu erben da ich einfach ein Objekt von Objekteverwaltung erschaffe und damit automatisch auf meine Funktionen zugreifen kann :)
 
G

Guest

Gast
wahnsinn super ich danke dir jetzt probier ich das mit dem Comparator aus ;)
 
G

Guest

Gast
So hab das mit dem Comparator so gemacht ist das so richtig :

Code:
class ComparatorKlasse implements Comparator
	{ public int compare(Object o1, Object o2) {
	     return o1.toString().compareTo(o2.toString());
	   }
	   
	}


als eigene Klasse und in der Klasse meiner Funktionen :



Code:
public void sortierenMitComperator(){
                    Collections.sort(formen, new ComparatorKlasse());}


Und dann aufgerufen in der Main mit :

Code:
Collections.sort(c,klasse);
		Iterator it = c.iterator();
		while (it.hasNext ())
		System.out.println((String)it.next());

Hoffe das das richtig ist :)
 

ARadauer

Top Contributor
return o1.toString().compareTo(o2.toString());

naja was gibt dir den toString zurück?

wenn du die methode nicht überschrieben hast, ist das glaub ich irgend ein hashwert
 
G

Guest

Gast
Kann ich in der ComparatorKlasse steht "Objekt" auch schreiben meine eigene Objekte zum Beispiel: Point o1 ??
 
M

Michael...

Gast
Anonymous hat gesagt.:
Kann ich in der ComparatorKlasse steht "Objekt" auch schreiben meine eigene Objekte zum Beispiel: Point o1 ??
Nein, da diese Methode ja durch das Interface Comparator implementiert wird. Und dieses Interface verlangt eben eine
Methode compare(Object, Object)
 

Landei

Top Contributor
Und dieses Interface verlangt eben eine Methode compare(Object, Object)
So ein Blödsinn!

Code:
class UppercaseComparator implements Comparator<String> {
  public int compare(String o1, String o2) {
     return o1.toUpperCase().compareTo(o2.toUpperCase());
  }
}
 
M

Michael...

Gast
Tschuldigung, nicht jeder hat die Möglichkeit mit J2SE v5.0 oder höher zu arbeiten.
 
G

Guest

Gast
Landei hat gesagt.:
Und dieses Interface verlangt eben eine Methode compare(Object, Object)
So ein Blödsinn!

Code:
class UppercaseComparator implements Comparator<String> {
  public int compare(String o1, String o2) {
     return o1.toUpperCase().compareTo(o2.toUpperCase());
  }
}


Was bedeutet der Code? bei mir funktioniert das aber was bedeutet das mit UpperCase?
 
P

Proktmus

Gast
wenn in der API nichts über Uppercase steht, dann ist es Magie, in Java gibt es viele solche Stellen.
 

Landei

Top Contributor
"Das ist ein String".toUpperCase() --> "DAS IST EIN STRING"
"Das ist ein String".toLowerCase() --> "das ist ein string"
 
G

Guest

Gast
So habe es jetzt mit dem Comparator sortiert.

Mein Prof sagte mir nun ich sollte das nun mal versuchen mit der Methode "public static void sort(Object[] a)"
ohne Comparator ! Dazu denk ich muss ich meine Collection umstrukturieren wie es aussieht in ein Array. Dazu habe ich die Werte einfach kopiert mit :

Code:
Object[] o = grafik.formen.toArray();
	    for (int i = 0; i < o.length; i++) {
	    System.out.println(o[i]);
	    }


Könnt ihr mir da einen Tipp geben wie ich da vorgehen kann?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
J Objekte einer ArrayList in eine Tabelle einfügen Java Basics - Anfänger-Themen 2
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
E Eine Instanzvariable und zwei Objekte Java Basics - Anfänger-Themen 14
A Objekte in eine Liste einfügen Java Basics - Anfänger-Themen 7
G zwei Objekte bewegen - der eine bewegt sich nicht flüssig? Java Basics - Anfänger-Themen 10
L Eine Art HashMap für inkonsistente Objekte Java Basics - Anfänger-Themen 5
Q 2 Objekte in eine Klasse übergeben Java Basics - Anfänger-Themen 10
G Serialisieren mehrerer Objekte in EINE (XML)-Datei Java Basics - Anfänger-Themen 12
G zwei Objekte, eine Variable Java Basics - Anfänger-Themen 14
StudentXYZ Auf Objekte zugreifen, die eine andere Methode initialisiert Java Basics - Anfänger-Themen 2
L Mehrere Objekte mit NIO in eine Datei schreiben Java Basics - Anfänger-Themen 4
M Gibt es eine Begrenzung der Anzahl der Objekte? Java Basics - Anfänger-Themen 5
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben