Datenstruktur [int id, int wert] nach wert sortieren?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich hab hier schon einiges über comparator usw gelesen, kann es auf mein Problem aber gerade nicht anwenden.
Ich habe hier folgende Datenstruktur (ist momentan eine HashMap, kann aber auch jede andere Datenstruktur nehmen):

ID WERT
1 56
2 75
3 23
4 52
5 11
6 23

Nun würde ich das Ganze gerne nach WERT aufsteigend sortieren und falls WERT identisch ist zusätzlich noch na ID sortieren. Nur wie?
 
B

Beni

Gast
Eine HashMap kann man nicht sortieren, sonst wäre es keine HashMap... Diese Daten musst du erstmal in eine Liste speichern. Dazu ist eine zusätzliche Klasse notwendig, z.B.:
Code:
public class X{
  private int id;
  private int value;
  
  ... get/set etc...
}

Und danach kannst du den Comparator anwenden:
Code:
List<X> list = ...
Collections.sort( list, new XComparator() );
Code:
public class Comparator<X>{
  public int compare( X a, X b ){
    return ... "vergleich"
  }
}
 

JavaFred

Aktives Mitglied
Anstatt den Kram in eine Liste zu packen und anschließend zu sortieren kannst Du auch eine PriorityQueue verwenden, in die Du die Elemente einordnest:

Code:
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;

public class Blah
{
	public static void main(String[] args)
	{
		final Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		map.put(1, 56);
		map.put(2, 75);
		map.put(3, 23);
		map.put(4, 52);
		map.put(5, 11);
		map.put(6, 23);

		class Comp implements Comparator<Integer>
		{
			public int compare(Integer o1, Integer o2)
			{
				final int c = map.get(o1).compareTo(map.get(o2));
				return c != 0 ? c : o1.compareTo(o2);
			}
		}

		Queue<Integer> queue = new PriorityQueue<Integer>(100, new Comp());
		for (int x: map.keySet())
			queue.offer(x);

		for (int x: queue)
			System.out.printf("%d -> %d\n", x, map.get(x));
	}
}

Ausgabe:

5 -> 11
3 -> 23
6 -> 23
2 -> 75
4 -> 52
1 -> 56
 
G

Guest

Gast
Hallo,

vielen Dank schon mal für die Hilfe.

@Beni: Leider hast du genau das weggelassen was ich an dem Comparator nicht verstehe. Was soll ich denn vergleichen? Das letzte Element mit dem jetzigen? ID mit WERT?

@JavaFred: Mit deiner Methode wirds leider gar nicht sortiert

Code:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;


public class Test{
	public static void main(String[] argv){
		final Map<Integer,Integer> map = new HashMap<Integer,Integer>();
		map.put(1, 1);
		map.put(2, 2);
		map.put(3, 3);
		map.put(4, 2);
		map.put(5, 5);
		map.put(6, 6);
		map.put(7, 7);
		map.put(8, 2);
		map.put(9, 3);
		map.put(10, 10);
		
		System.out.println("Unsortiert");
		System.out.println("ID  WERT");
		for(int i=1;i<=10;i++){
			System.out.printf("%d -> %d\n", i, map.get(i));	
		}

		class Comp implements Comparator<Integer>{
			public int compare(Integer o1, Integer o2){
				final int c = map.get(o1).compareTo(map.get(o2));
				return c != 0 ? c : o1.compareTo(o2);
			}
		} 

		Queue<Integer> queue = new PriorityQueue<Integer>(100, new Comp());
		for (int x: map.keySet())
			queue.offer(x);
		System.out.println("\nSortiert mit JavaFreds Methode");
		System.out.println("ID  WERT");
		for (int x: queue)
			System.out.printf("%d -> %d\n", x, map.get(x));		
	}
}
 
B

Beni

Gast
Anonymous hat gesagt.:
@Beni: Leider hast du genau das weggelassen was ich an dem Comparator nicht verstehe. Was soll ich denn vergleichen? Das letzte Element mit dem jetzigen? ID mit WERT?
Die beiden Objekte die dem Comparator übergeben werden, "a" und "b" in meinem Beispiel.

Der Comparator ist hier auch beschrieben.

Schlussendlich läuft es auf sowas raus:
Code:
public int compare( X a, X b ){
  if( a.wert < b.wert ) return -1;
  if( a.wert > b.wert ) return 1;
  if( a.id < b.id ) return -1;
  if( a.id > b.id ) return 1;
  return 0;
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
O Datenstruktur auf SET prüfen in O(n) Java Basics - Anfänger-Themen 32
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
R Klassen Die lineare Datenstruktur Queue Java Basics - Anfänger-Themen 3
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
C Methoden Datenstruktur Liste Java Basics - Anfänger-Themen 3
S Datentypen nicht lineare STATISCHE Datenstruktur? Java Basics - Anfänger-Themen 10
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Datenstruktur gesucht Java Basics - Anfänger-Themen 3
Luk10 Geeignete Datenstruktur Java Basics - Anfänger-Themen 4
J Erzeugen einer Datenstruktur Java Basics - Anfänger-Themen 12
T Datenstruktur für Sortierung Java Basics - Anfänger-Themen 4
H mehrdimensionale Datenstruktur erfassen Java Basics - Anfänger-Themen 10
StupidAttack Gson, welche Datenstruktur? Java Basics - Anfänger-Themen 4
T Java-Datenstruktur: zuweisen von Strings auf Listen von Strings Java Basics - Anfänger-Themen 10
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
D Welche Datenstruktur für welche Problemstellung? Java Basics - Anfänger-Themen 10
A begrenzte Datenstruktur zur Speicherung von bytes Java Basics - Anfänger-Themen 6
H Adjazenzliste - Datenstruktur aber wie? Java Basics - Anfänger-Themen 7
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
B Finden gemeinsamer Kanten: welche Datenstruktur ? Java Basics - Anfänger-Themen 9
B Schlange Datenstruktur Java Basics - Anfänger-Themen 16
G Datenstruktur gesucht Java Basics - Anfänger-Themen 14
A Schnelle, dynamische, geordnete Datenstruktur? Java Basics - Anfänger-Themen 11
E Gibt es eine ähnliche Datenstruktur wie eine Hashmap Java Basics - Anfänger-Themen 3
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
D Was fürne Datenstruktur für Kreuztabelle mit doubles? Java Basics - Anfänger-Themen 1
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
D Was machen wenn Datenstruktur sich ständig ändert? Java Basics - Anfänger-Themen 10
0 Dynamische Datenstruktur ohne Duplikate und mit direkter Elementauswahl Java Basics - Anfänger-Themen 3
G Welche Datenstruktur ( Sets / Maps)? Java Basics - Anfänger-Themen 10
I Datenstruktur eines Terminkalenders Java Basics - Anfänger-Themen 11
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
M Suche passende Datenstruktur Java Basics - Anfänger-Themen 3
P geeignete Datenstruktur für dreidimensionale Raumbelegung Java Basics - Anfänger-Themen 5
G Suche geeignete Datenstruktur Java Basics - Anfänger-Themen 8
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
U Welche Datenstruktur soll ich nehmen? Java Basics - Anfänger-Themen 11
G Welche Datenstruktur ist hier die sinnvolste Java Basics - Anfänger-Themen 6
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
X txt datei in eine datenstruktur einlesen Java Basics - Anfänger-Themen 3
J Datenstruktur Java Basics - Anfänger-Themen 6
S Welche Datenstruktur für Tabelle/DB? Java Basics - Anfänger-Themen 5
1 Wahl der Datenstruktur für die Suche. Java Basics - Anfänger-Themen 9
G Geeignete Datenstruktur ? Java Basics - Anfänger-Themen 8
N passende Datenstruktur Java Basics - Anfänger-Themen 3
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
6 Welche Datenstruktur? Java Basics - Anfänger-Themen 3
P Datenstruktur Java Basics - Anfänger-Themen 4
J Kann man Daten innerhalb einer Datenstruktur verändern? Java Basics - Anfänger-Themen 4
K datenstruktur Java Basics - Anfänger-Themen 5
G Datenstruktur abbilden Java Basics - Anfänger-Themen 3
F Welche Datenstruktur für Matrix mit Vektoren? Java Basics - Anfänger-Themen 2
F Gibt es eine Datenstruktur für Koordinaten x, y? Java Basics - Anfänger-Themen 8
E Welche Datenstruktur für Spielbäume? Java Basics - Anfänger-Themen 13
P Datenstruktur gesucht: Array mit Dictionary Java Basics - Anfänger-Themen 2
H Datenstruktur für folgende Daten Java Basics - Anfänger-Themen 8
G Komplexe Datenstruktur (Liste heterogener Datensätze) ? Java Basics - Anfänger-Themen 2
P Welche Datenstruktur um schnell zu suchen? Java Basics - Anfänger-Themen 25
S Datenstruktur für Fahrplan einer Buslinie Java Basics - Anfänger-Themen 7
S Heterogene Datenstruktur Problem mit Set Java Basics - Anfänger-Themen 12
G Datenbank VS simpler Datenstruktur Java Basics - Anfänger-Themen 3
K Welche Datenstruktur für eine Bibliotheksanwendung? Java Basics - Anfänger-Themen 5
G datenstruktur für jTable? Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben