objekte in hashset einsortieren

Status
Nicht offen für weitere Antworten.

djterm

Mitglied
hallo!

ich bin neu hier, deshalb weiß ich nicht, ob die frage wirklich als anfängerfrage geeignet ist.

also: ich habe eine liste, genauer ein hashset. in dieses hashset sind objekte abgelegt, wie immer beim set ohne reihenfolge.
nun will ich aber durch überschreiben der compareTo() - methode erreichen, dass die objekte sehr wohl sortiert werden, z.b. für objekte autos nach ps-zahl.

problem ist, dass die überschriebene methode überhaupt nicht aufgerufen wird.

die eigentliche frage lautet also:

wie kann man objekte in einer sortierten reihenfolge in ein hashset ablegen?

-------------------------------------------------------------------------------------------------------------------------------------------

oppinions are like assholes:
everyone has one!!!
 
S

SlaterB

Gast
was brächte das für einen Vorteil, die Objekte dort sortiert abzulegen?
ein Hashset macht sowas gar nicht,
ein TreeSet vielleicht?


opinion mit einem p?
 

djterm

Mitglied
danke für die antwort, aber:

ein hashset sortiert sehr wohl in einer gewissen reihenfolge. diese bleibt natürlich verborgen, ist aber vorhanden, lexikalisch oder ähnlich.

beim treeset würde es ja auf die gleiche problematik hinauslaufen:

irgendwo muss man dem treeset ja sagen, nach welchen kriterien er sortieren soll. also muss eine methode überschrieben werden. wahrscheinlich compare oder compareTo...

dies tat ich bereits, es hat jedoch keine wirkung gezeigt...genau das ist mein problem
 
S

SlaterB

Gast
tja, das ist dann eine andere Frage,
dazu müsste man deinen Code sehen,

was man alles so braucht kann ich nicht genau sagen,
auf der sicheren Seite bist du aber mit allen 4 Punkten:
implements Comparable, compareTo, equals und hashCode

siehe folgendes Beispiel:
Code:
package test;

import java.util.HashSet;
import java.util.TreeSet;

public class Test implements Comparable {
    int i;

    public Test(int i) {
        this.i = i;
    }

    public static void main(String[] args) throws Exception {
        p("Start");

        int[] ints = new int[] { 4, 7, 2, 5, 7, 3, 4, 7, 6, 6 };

        HashSet<Test> set = new HashSet<Test>();

        for (int i : ints) {
            Test t = new Test(i);
            set.add(t);
        }

        p("\nset: " + set);
        for (Test t : set) {
            p("t: " + t);
        }

        TreeSet<Test> set2 = new TreeSet<Test>();
        for (int i : ints) {
            Test t = new Test(i);
            set2.add(t);
        }

        p("\nset2: " + set2);
        for (Test t : set2) {
            p("t: " + t);
        }

        p("End");

    }

    public static void p(Object o) {
        System.out.println(( o == null ? o : o.toString() ));
    }

    public int compareTo(Object other) {
        return i - ( (Test) other ).i;
    }

    public boolean equals(Object other) {
        return this.hashCode() == other.hashCode();
    }

    public int hashCode() {
        return i;
    }

    public String toString() {
        return String.valueOf(i);
    }
}

bei mir ist es da aber so wie ich vermutete:
für ein HashSet wird nix sortiert,
bei einem TreeSet werden die Objekte im Iterator in der richtigen Reihenfolge ausgegeben:

Start

set: [2, 4, 6, 3, 7, 5]
t: 2
t: 4
t: 6
t: 3
t: 7
t: 5

set2: [2, 3, 4, 5, 6, 7]
t: 2
t: 3
t: 4
t: 5
t: 6
t: 7
End
 

djterm

Mitglied
ok dann schick ich mal den code. nicht wundern, dass das beispiel so einfach gehalten ist, es soll ne übung sein!

Code:
hier das main:

import java.util.HashSet;
import java.util.Iterator;

public class Main {

public static void main(String[] args) {

		PKW bmw = new PKW();
		bmw.setName("3er BMW");
		bmw.setColor("Rot");
		bmw.setHorsePower(150);
		bmw.setCabrio(true);
		
		Bus bully = new Bus();
		bully.setName("VW Bully");
		bully.setColor("Gelb");
		bully.setHorsePower(100);
		bully.setBaujahr(1978);
		bully.setKlima(true);

HashSet<Auto> setlist = new HashSet<Auto>();
		
		setlist.add(bmw);
		setlist.add(bully);
		setlist.add(stinger);
		setlist.add(buffalo);
		setlist.add(mercedes);
		
		for (Iterator it = setlist.iterator();it.hasNext();){
			
			Object ob = it.next();
			Auto tmp = (Auto) ob;
			
			System.out.println("\nTyp : "+tmp.getClass().getSimpleName()+"\nName: "+tmp.getName()+
							   "\nPS  : "+tmp.getHorsePower());
		}
	}

}




Klasse PKW:
public class PKW extends Auto{
	
	private boolean cabrio, klima;
	
	public boolean isCabrio(){
		
		return cabrio;
	}
	
	public void setCabrio(boolean cabrio){
		this.cabrio = cabrio;
		
	}
	
	public void setKlima(boolean klima){
		this.klima = true;
	}
	
	public boolean isKlima(){
		return klima;
	}


}


Klasse Bus:

public class Bus extends Auto{
	
	private int baujahr;
	private boolean klima;
	
	public void setBaujahr(int baujahr) {
		this.baujahr = baujahr;
	}
	
	public int getBaujahr() {
		return baujahr;
	}
	
	public void setKlima(boolean klima){
		this.klima = true;
	}
	
	public boolean isKlima(){
		return klima;
	}

}


Klasse Auto:

public class Auto implements Comparable{
	
	private String color;
	private String name;
	private int maxSpeed;
	private double horsePower;
	
	public void setName(String name){
		this.name=name;
	}
	
	public String getName(){
		return name;
	}
	
	public void setColor(String color){
		this.color = color;
	}
	
	public String getColor(){
		return color;
	}
	
	public void setMaxSpeed (int maxSpeed) {
		
		this.maxSpeed = maxSpeed;
	}
	
	public int getMaxSpeed () {
		return maxSpeed;
	}
	
	public void setHorsePower(double horsePower){
		this.horsePower = horsePower;
	}
	
	public double getHorsePower(){
		return horsePower;
	}

	public int compareTo(Object o) {
		
		Auto tmp=(Auto)o;
		
		if ( tmp.getHorsePower() < this.getHorsePower() ) {
	
			return -1;
		}
		if ( tmp.getHorsePower() == this.getHorsePower() ) {
		
			return 0;
		}
		
		if ( tmp.getHorsePower() > this.getHorsePower() ) {
		
			return 1;
		}
		return 0;
	}
}
 
S

SlaterB

Gast
und wie wirkt sich diese Sortierung dann aus?
bei meinem Beispiel ist die HashCode-Sortierung ja die gleiche wie compare,
dennoch wird beim Iterator anscheinend nur die Einfüge-Reihenfolge genommen
 

djterm

Mitglied
ich habs jetzt so gemacht:
in Auto.java:
Code:
	public int compareTo(Object o) {		
		Auto tmp=(Auto)o;		
		if ( tmp.getHorsePower() < this.getHorsePower() ) {	
			return -1;
		}
		if ( tmp.getHorsePower() == this.getHorsePower() ) {		
			return 0;
		}		
		if ( tmp.getHorsePower() > this.getHorsePower() ) {		
			return 1;
		}
		return 0;
	}
in Main.java:
		TreeSet<Auto> setlist = new TreeSet<Auto>();
		
		setlist.add(bmw);
		setlist.add(bully);
		setlist.add(stinger);
		setlist.add(buffalo);
		setlist.add(mercedes);
		
		for (Iterator it = setlist.iterator();it.hasNext();){
			Object ob = it.next();
			Auto tmp = (Auto) ob;
			System.out.println("\nTyp : "+tmp.getClass().getSimpleName()+"\nName: "+tmp.getName()+
							   "\nPS  : "+tmp.getHorsePower());
		}
somit erfolgt die ausgabe nach ps sortiert (größte zuerst).
 

byte

Top Contributor
Pardon, ich habe mich nicht ganz korrekt ausgedrückt. Bei HashSet wird der Hashcode des Objekts verwendet, um zu prüfen, ob das Objekt schon Element der Menge ist. Die Iterationsreihenfolge bei HashSets ist quasi beliebig.

HashSet hat gesagt.:
This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
O Erste Schritte Objekte als Datenelemente Allgemeine Java-Themen 14
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
N Dynamische Objekte / DB Allgemeine Java-Themen 5
J Objekte binär speichern Allgemeine Java-Themen 10
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
V Objekte in Kategorien einteilen. Allgemeine Java-Themen 6
M 3D Objekte mit einer Linie Verbinden Allgemeine Java-Themen 3
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
A Dummy-Objekte für Webgui erzeugen Allgemeine Java-Themen 12
W Objekte speichern mit JFileChooser Allgemeine Java-Themen 8
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
L Objekte in Liste packen Allgemeine Java-Themen 2
S XML in Objekte wandeln. Euer Rat? Allgemeine Java-Themen 12
G Objekte serialisieren Allgemeine Java-Themen 2
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
D Objekte nur unter bestimmten Voraussetzungen erzeugen Allgemeine Java-Themen 4
S Objekte mit Arrays Allgemeine Java-Themen 9
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S erzeugte objekte zählen Allgemeine Java-Themen 3
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
Landei Objekte ohne Konstruktoraufruf erzeugen Allgemeine Java-Themen 7
E tiefe Kopie nicht serialisierbarer Objekte Allgemeine Java-Themen 3
J Speicherbedarf und persistente Objekte Allgemeine Java-Themen 4
J ArrayList Objekte anhand Propertywerte filtern Allgemeine Java-Themen 3
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
J Eindeutige ID für Objekte als Keys in TreeMap Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben