Interface Comparable-Interface bei HashMap

pg1337

Bekanntes Mitglied
Sers liebe community,

ich habe mir mal selbst eine Aufgabe gestellt zum Thema, Listeninhalte vergleichen und nach einem bestimmten Kriterium sortieren, Stichwort: Comparable Interface.

Ich habe mir mal zwei Klassen erstellt, einmal Article & einmal die main Methode:

Java:
import java.util.*;

public class ArticleTest {
	
	public static void main(String[] args){
		
		Map<String, Integer> map1= new HashMap<String, Integer>();
		Article tv= new Article("Tv", 2000);
		Article radio= new Article("Radio", 150);
		Article dvdPlayer= new Article("Dvd-Player", 200);
		Article playStation= new Article("PS3", 700);
		Article computer= new Article("Computer", 1200);
		
		map1.put(tv.getName(), tv.getPreis());
		map1.put(radio.getName(), radio.getPreis());
		map1.put(dvdPlayer.getName(), dvdPlayer.getPreis());
		map1.put(playStation.getName(), playStation.getPreis());
		map1.put(computer.getName(), computer.getPreis());
		
	}
	
	public static int compareTo(Article article){
		return 0;
	}
}


Java:
public class Article {
	
	String name;
	int preis;
	
	
	public Article(String name, int preis) {
		super();
		this.name = name;
		this.preis = preis;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public int getPreis() {
		return preis;
	}


	public void setPreis(int preis) {
		this.preis = preis;
	}
}


Ein Artikel hat jeweils ein Attribut "Name" und den dazugehörigen Preis.
Wie muss nun meine int compareTo() Methode aussehen?
(Ich habe bewusst ne HashMap gewählt, da ich jeden Artikel nur einmal haben möchte).


Sortiert soll nach dem Kriterium "Preis" werden, sprich das teuerste Element soll an erster Stelle stehen.
Wäre sehr dankbar, wenn mir da jemand weiterhelfen könnte.

Gruß,
pg1337
 
B

bygones

Gast
deine Article klasse muss das interface Comparable<Article> implementieren.... nicht die Testklasse

und als Map kannst du eine TreeMap nehmen, die sortiert dann deine Objekte gleich
 

M_Schaffrath

Aktives Mitglied
Java:
public static int compareTo(Article article){
   return article.getPreis() - this.getPreis();

Zumindest, solange die Preise integer sind.
 

faetzminator

Gesperrter Benutzer
Erstens werden in der [japi]HashMap[/japi] die Elemente nicht sortiert. Du müsstest die [japi]SortedMap[/japi] o.ä. verwenden.
Zweitens sähe die Methode etwa so aus:
Java:
public static int compareTo(Article article) {
    if (getPreis() != article.getPreis()) {
        return getPreis() - article.getPreis();
    }
    return getName().compareTo(getName());
}
 
B

bygones

Gast
ach herrje woher euer static ?

er redet von Comparable Interface... das soll er implementieren in seiner Datenklasse
 

pg1337

Bekanntes Mitglied
Wenn ich das die Article Klasse implementieren lasse, muss ich die Methoden mit übernehmen.

Ist jetzt die static Methode in der Main Klasse richtig, oder was kommt nun in die compareTo Methode in der Article Klasse?

Java:
public class Article implements Comparable<Article> {
	
// Attribute
// Konstruktor
// Methoden
// ...

	@Override
	public int compareTo(Article arg0) {
		// TODO Auto-generated method stub
		return 0;
	}
}
 

Michael...

Top Contributor
Ist jetzt die static Methode in der Main Klasse richtig,
Nein.
oder was kommt nun in die compareTo Methode in der Article Klasse?

Java:
public class Article implements Comparable<Article> {
	
// Attribute
// Konstruktor
// Methoden
// ...

	@Override
	public int compareTo(Article arg0) {
		// TODO Auto-generated method stub
		return 0;
	}
}
Das hier passt. In der Methode musst Du dann die Vergleich der für Dich relevanten Kriterien durchführen und zurückgeben musst Du dann einen negative Zahl, 0, oder eine positive Zahl, je nach dem wie die Sortierung durchgeführt werden soll.
Returns:
a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
Details s. API Doku oder diverse im Netz auffindbare Codebeispiele.
 

pg1337

Bekanntes Mitglied
verstehe ich nicht, wie das dann auszusehen hat.
Was muss ich in die if - Anweisungne reinschreiben?

Das mit -1, 0, 1 ist mir bekannt, nur wie setze ich das hier um?:/
 

x22

Bekanntes Mitglied
Lass dir mal, wenn du Eclipse verwendest (oder eine andere Umgebung) den
Java:
.hashcode()
sowie die
Java:
.equals()
Methode ausgeben und schau, ob du damit was anfangen kannst.. Das sollte helfen.

x22
 

M_Schaffrath

Aktives Mitglied
Es geht nicht um -1, 0 oder 1, sondern um negativ, null oder positiv. Wenn du zwei integer-Zahlenwerte miteinander vergleichen willst, kannst du die einfach voneinander abziehen und das Ergebnis zurückgeben. Wenn der Subtrahend größer ist als der Minuend, wird der Minuend vorher einsortiert. Umgekehrt kommt der Subtrahend in der Reihenfolge zuerst. Sind beide gleich groß, ändert sich die Reihenfolge nicht.

Wenn sich mit den Vergleichskriterien nicht so einfach rechnen lässt, musst du allerdings mit if oder switch vergleichen und dementsprechend eine Zahl zurückgeben...
 

pg1337

Bekanntes Mitglied
Vielen Dank für die fixe Antwort.

Könntest du mir sagen, wie das nun bei meinem Beispiel auszusehen hat?
Ich muss das einmal gesehen haben, um es zu verstehen.
Wäre dir sehr dankbar. Habe grade ein paar Monate "frei" und versuche mir Java selbst beizubringen, nur sowas muss ich einmal gesehen haben.

Gruß,
pg1337
 

Michael...

Top Contributor
Allgemein:
Object Ordering (The Java™ Tutorials > Collections > Interfaces)
Hier noch ein spezielleres Beispiel für die if Abfrage und die Rückgabe. (den class cast kann man sich mittlerweile sparen:
Java Comparable Example | Java Tutorials and Examples

[EDIT]Vielleicht noch als allgemeinen Hinweis: Mit Comparable kann man die Standardreihenfolge von Objekten eines Typs festlegen. Soll nach verschiedenen Kriterien (mal nach Preis aufsteigend oder nach Name absteigen...) und unterschiedlicher Reihenfolge dynamisch sortiert werden, nimmt man einen Comparator.[/EDIT]
 
Zuletzt bearbeitet:
B

bygones

Gast
im grund einfach [c]return arg0.preis - preis[/c], da wie schon gesagt, es einfach um negativ, null oder positiv geht
 

pg1337

Bekanntes Mitglied
Ok vielen Dank.
Wie rufe ich die Methode nun auf in der MainKlasse?

Ich muss ja dann jedes Objekt mit jedem Vergleichen.. gibts da nicht einen schnelleren Weg, dass man die Methode nur einmal aufrufen muss?

Wie würde das nun aussehen in der MainKlasse?

[EDIT]Weil iterieren kann ich mit ner for schleife schlecht über ne HashMap..[/EDIT]
Gruß
 
Zuletzt bearbeitet:
B

bygones

Gast
wenn du statt der HashMap zb die TreeMap nutzt, so kuemmert die sich schon um das, du musst gar nix mehr aufrufen
 

pg1337

Bekanntes Mitglied
Nein, die sortiert nur nach Namen, will ja nach dem Preis sortieren.

Jetzt kommt als Ausgabe:

{Computer=1200, Dvd-Player=200, PS3=700, Radio=150, Tv=2000}


so will ich das ja nicht..
 

x22

Bekanntes Mitglied
Dass du über eine Map nicht interieren kannst, hast du richtig verstanden.

Nur jetzt schau mal an, was du erzeugt hast. Du hast Objekte vom Typ Article erzeugt, warum also nicht eine Liste erstellen, in die du nun über <Article> (Generics) deine Article (Tv, Radio, etc..) nacheinander einfügst und nun über die Methode dann:

Java:
Collections.sort(list1)
dir die Werte sortieren lässt?

Sobald du nämlich diese Collections.sort Methode aufrufst wird das "comparable" berücksichtigt und danach sortiert..

Sprich so:
Java:
	List<Article> list1= new ArrayList<Article>();
		list1.add(tv);
		list1.add(radio);
		list1.add(dvdPlayer);
		list1.add(playStation);
		list1.add(computer);
		
		Collections.sort(list1);


Best regards,
x22
 

Michael...

Top Contributor
Die Sortierung legst Du in der compareTo Deiner Klasse fest. Wenn da eine Sortierung nach Name implementiert ist. Wird jede List, Map, Set... welche Objekte standardmäßig sortiert, eben diese in compareTo nutzen und somit nach Namen sortieren. Willst Du "dynamsich" und "variabl" sortieren, steck die Objekte in eine List, z.B. ArrayList und sortiere mittels Comparator. Hierfür müsst/kannst Du für jede gewünsche Sortierung Name aufsteigend, Name absteigend, Preis aufsteigend, Preis absteigend, Name aufsteigend/Preis absteigend... einen Komparator schreiben und mittels Collection.sort(list, comparator) sortieren.
 

pg1337

Bekanntes Mitglied
Ok danke x22, das habe ich verstanden.
Bei System.out.println(list1) kommen aber komische Ergebnisse raus...:s
#Bin etwas verwirrt#..:(/
 

x22

Bekanntes Mitglied
Du musst nun auch erst über deine list1 iterieren..:

Java:
	for(Article article: list1){
			System.out.println("Name: " + article.name + " \t||Preis: " + article.preis);
		}
	}


Hoffe, das Problem ist gelöst.

Best regards,
x22
 

pg1337

Bekanntes Mitglied
Jaa funktioniert :))) Dankee!

Gut zu wissen, dass bei dem Collections.sort Alogorithmus sofort die comparable Methode berücksichtigt wird!

Gruß,
pg1337
 

x22

Bekanntes Mitglied
Allgemein:
Object Ordering (The Java™ Tutorials > Collections > Interfaces)
Hier noch ein spezielleres Beispiel für die if Abfrage und die Rückgabe. (den class cast kann man sich mittlerweile sparen:
Java Comparable Example | Java Tutorials and Examples

[EDIT]Vielleicht noch als allgemeinen Hinweis: Mit Comparable kann man die Standardreihenfolge von Objekten eines Typs festlegen. Soll nach verschiedenen Kriterien (mal nach Preis aufsteigend oder nach Name absteigen...) und unterschiedlicher Reihenfolge dynamisch sortiert werden, nimmt man einen Comparator.[/EDIT]


Schau dir dennoch die Links von Michael... an, damit sollte es dir nochmals klarer werden.

x22
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
L Interface & Comparable Java Basics - Anfänger-Themen 15
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
C Comparable Interface Java Basics - Anfänger-Themen 8
T Interface Interface Comparable Problem... Java Basics - Anfänger-Themen 2
A Comparable interface Java Basics - Anfänger-Themen 26
I Interface Comparable für Server-Item-Interface Java Basics - Anfänger-Themen 12
M Frage zum Interface Comparable Java Basics - Anfänger-Themen 3
R Comparable Interface Funktionalität selbst programmieren? Java Basics - Anfänger-Themen 3
A Interface Comparable Java Basics - Anfänger-Themen 2
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
I Generics und Comparable Java Basics - Anfänger-Themen 14
O Comparable Generic Java Basics - Anfänger-Themen 24
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
N Comparable bzw Comparator Java Basics - Anfänger-Themen 5
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
K Comparable - Objekte aus Array vergleichen und größtes auswählen Java Basics - Anfänger-Themen 1
Shizmo Frage zu Comparable Java Basics - Anfänger-Themen 4
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
F Comparable mit String Java Basics - Anfänger-Themen 5
M Comparable und Comparator nicht ganz klar Java Basics - Anfänger-Themen 1
F Objekte sortieren mit Comparable Java Basics - Anfänger-Themen 9
R Mehrere Interfaces(Comparable, ...) Java Basics - Anfänger-Themen 2
B Comparable & Comparator Java Basics - Anfänger-Themen 9
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
J Probleme mit Comparable, compareTo() Java Basics - Anfänger-Themen 2
P Comparable und Generics Java Basics - Anfänger-Themen 6
S comparable und equals Java Basics - Anfänger-Themen 7
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
S Comparable Java Basics - Anfänger-Themen 4
H Comparable und Comparator Java Basics - Anfänger-Themen 22
S instanceof Comparable...geht nicht? Java Basics - Anfänger-Themen 20
M comparable funktion & reverse funktion Java Basics - Anfänger-Themen 8
H Mehrere Comparable Java Basics - Anfänger-Themen 4
S Comparator / Comparable ? Java Basics - Anfänger-Themen 3
D Comparable - Bucketsort / Radixsort? Java Basics - Anfänger-Themen 2
B Mehrere Werte mit Comparable sortieren Java Basics - Anfänger-Themen 14
S String umwandeln in Comparable Java Basics - Anfänger-Themen 6
J Comparable Java Basics - Anfänger-Themen 9
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
frau-u Wie vergleicht Comparable Java Basics - Anfänger-Themen 2
M Comparable - Bedingung erzwingen Java Basics - Anfänger-Themen 3
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben