HashMap sortieren

I

IceDragon

Gast
Guten Tag,

Ich habe eine Aufgabe in der einer hashMap einige Werte übergeben werden.
Aus einer Textdatei werden die Worte aufgeteilt und in eine Arraylist gegeben.
danach werden alle in eine hasMap geladen, sollte ein Wort doppelt vorkommen dann wird dieses nicht neu eingetragen sondern der Wert des schon vorhandenen inkrementiert.
z.b. hallo : 1 , sie : 3, hier : 1, ich :2 usw.

wie kann ich diese Hashmap jetzt nach den werten sortieren?
Ich hätte dazu gerne nur ein paar Tipps oder vll. links zur einer verständlichen Erklärung die mir weiterhilft.
Hab natürlich auch schon gegoogelt, allerdings fliegen mir da immer nur wieder Programmausschnitte entgegen mit dürftiger Erklärung und ich will das ganze ja auch verstehen.

Vielen dank.
 

timbeau

Gesperrter Benutzer
Hi, nach Werten sortieren wird schwierig.

Du kannst eine inverse TreeMap anlegen, also HashMap<A,B> zu TreeMap<B,A> die sortiert ist.
 
I

IceDragon

Gast
ich hab gelesen das man die werte einer liste zuweisen kann und diese dann sortieren. die Wörter die drinn stehen sollen dann angeblich auch beibehalten werden (was ich nicht nachvollziehen kann.)
das versuche ich gerade aber ohne erfolg.

heisst das wenn ich anstatt hashMap eine treeMap verwende sind die werte gleich sortiert? ich hätte nämlich gern den größten wert am Anfang.
oder wie kann ich aus meiner hashMap eine treeMap machen?
 

diggaa1984

Top Contributor
Java:
//Constructs a new, empty tree map, using the natural ordering of its keys.
TreeMap()

nun musst du nur, wie timbeau vorgeschlagen hat die werte der hashmap verdreht eintragen. Sprich keys werden values und die values der hashmap sind die keys.
 

timbeau

Gesperrter Benutzer
Wie fügst du Daten deiner HashMap hinzu?

Genauso machst du es bei der TreeMap.

Um die Reihenfolge umzudrehen
Java:
Map reverseOrderedMap = new TreeMap(Collections.reverseOrder());
 
N

nillehammer

Gast
timbeau hat gesagt.:
Hi, nach Werten sortieren wird schwierig.

Du kannst eine inverse TreeMap anlegen, also HashMap<A,B> zu TreeMap<B,A> die sortiert ist.
Für den gegebenen Anwendungsfall ist dies leider keine valide Lösung. Nehmen wir das gegebene Beispiel der Entries:
Code:
hallo : 1 , sie : 3, hier : 1, ich : 2
Wenn wir hier invertieren, kommt folgendes raus:
Code:
1 : hallo, 3 : sie, 1 : hier, 2 : ich
Diese Entries können so nicht in einer (Tree-)Map gespeichert werden, weil der key "1" doppelt vorkommt. Aus dieser Situation sehe ich zwei Auswege:
  1. Du benutzt eine SortedMap, in der Du aber einen Key auf mehrere Values mappst. Die Values können ihrerseits auch wieder sortiert sein. Das wird beim Iterieren für die Anzeige aber wohl auf zwei verschachtelte Schleifen hinauslaufen.
  2. Du schreibst Dir einen Comparator für Deine Map.Entry und benutzt ein SortedSet.
[EDIT]
diggaa1984 hat gesagt.:
nun musst du nur, wie timbeau vorgeschlagen hat die werte der hashmap verdreht eintragen. Sprich keys werden values und die values der hashmap sind die keys.
Wie gesagt, aus den oben genannten Gründen keine valide Lösung für den gegebenen Anwendungsfall.
[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
I

IceDragon

Gast
vielen dank für eure schnelle hilfe ich versuche jetzt gerade eine klasse für den comparator zu schreiben und die werte in eine treeMap zu bekommen mal sehen ob es klappt ich meld mich auf jedenfall wieder ;-)
 

timbeau

Gesperrter Benutzer
nille hat Recht, mein Fehler. Passiert wenn mans nicht testet.

Daher hab ich mich mal an die Arbeit gemacht.

Java:
package javaforum;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapTest {

	public static void main(String[] args) {

		Map<String, Integer> startMap = new HashMap<String, Integer>();

		startMap.put("Er", 1);
		startMap.put("Sie", 2);
		startMap.put("Es", 1);

		String neu = "Es";
		insertInMap(startMap, neu);
		
		System.out.println("HashMap \n");
		Set<String> keys = startMap.keySet();
		for (String key : keys) {
			System.out.println(key + " | " + startMap.get(key));
		}

		/*
		 * Da hier "Es" & "Sie" den gleichen Wert haben kann man nicht einfach
		 * die TreeMap erstellen wie Nille schon sagt
		 */
		
		TreeMap<Integer, Set<String>> treeMap = new TreeMap<Integer, Set<String>>();
		for (String key : keys) {
			int value = startMap.get(key);
			Set<String> values;
			if(treeMap.containsKey(value)){
				values = treeMap.get(value);
				values.add(key);
			} else {
				values = new HashSet<String>();
				values.add(key);
			}
			
			treeMap.put(value, values);
		}
		System.out.println("\nTreeMap \n");
		Set<Integer> treeValues = treeMap.keySet();
		for (Integer integer : treeValues) {
			Set<String> values = treeMap.get(integer);
			System.out.print(integer + " |");
			for (String string : values) {
				System.out.print(" " + string);
			}
			System.out.println();
		}
		
		/* Und groesster Wert zuerst*/
		System.out.println("\nAndersrum");
		List<Integer> reverseKeys = new LinkedList<Integer>(treeValues);
		Collections.reverse(reverseKeys);
		for (Integer integer : reverseKeys) {
			Set<String> values = treeMap.get(integer);
			System.out.print(integer + " |");
			for (String string : values) {
				System.out.print(" " + string);
			}
			System.out.println();
		}
		
		

	}

	private static void insertInMap(Map<String, Integer> startMap, String neu) {
		if (startMap.containsKey(neu)) {
			int value = startMap.get(neu);
			startMap.put(neu, ++value);
		}
	}
}
Output:
Code:
HashMap 

Er | 1
Es | 2
Sie | 2

TreeMap 

1 | Er
2 | Es Sie

Andersrum
2 | Es Sie
1 | Er

Würde mich auch über ein Danke nach deiner Anmeldung freuen ;)
 
Zuletzt bearbeitet:
H

hüteüberhüte

Gast
Nachdem du mit dem Zählen der Wörter fertig bist, kannst du genauso gut die keys & values in eine Liste packen und nach values absteigend sortieren. Das kommt vom Aufwand her auf das gleiche raus und lässt sich leicht implementieren.

Edit: Dann so:

Java:
    public static class Elem {

        public final String STR;
        public final int INT_VALUE;

        public Elem(String s, int i) {
            STR = s;
            INT_VALUE = i;
        }

        @Override
        public String toString() {
            return "(" + STR + ", " + INT_VALUE + ")";
        }
    }

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("er", 3);
        map.put("sie", 4);
        map.put("es", 2);

        List<Elem> list = new ArrayList<Elem>(map.size());

        Set<Map.Entry<String, Integer>> set = map.entrySet();
        for (Map.Entry<String, Integer> e : set) {
            list.add(new Elem(e.getKey(), e.getValue()));
        }

        Collections.sort(list, new Comparator<Elem>() {

            @Override
            public int compare(Elem o1, Elem o2) {
                return o1.INT_VALUE < o2.INT_VALUE ? 1 : o1.INT_VALUE > o2.INT_VALUE ? -1 : 0;
            }
        });

        System.out.println(list);
    }

Code:
[(sie, 4), (er, 3), (es, 2)]

HashMap erstellen, Wörter zählen, ArrayList (oder einfach nur ein Array) erstellen, Wörter&Anzahl der Liste hinzufügen, sortieren und ausgeben...
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
G (Linked)HashMap sortieren Java Basics - Anfänger-Themen 1
S HashMap sortieren Java Basics - Anfänger-Themen 17
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
krgewb HashMap Java Basics - Anfänger-Themen 2
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
F gson mit einer Hashmap Java Basics - Anfänger-Themen 2
J JSON-HashMap Java Basics - Anfänger-Themen 3
J Hashmap Java Basics - Anfänger-Themen 13
C Hashmap zickt Java Basics - Anfänger-Themen 9
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
J HashMap Java Basics - Anfänger-Themen 6
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
J Hashmap auslesen Java Basics - Anfänger-Themen 7
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
shiroX Methoden Morse-Code Übersetzer mit HashMap Java Basics - Anfänger-Themen 5
E HashMap Problem Java Basics - Anfänger-Themen 5
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
T HashMap und die Methoden Java Basics - Anfänger-Themen 13
N Methoden Interaktives PDF mit HashMap befüllen Java Basics - Anfänger-Themen 0
Z Hashmap auseinandernehmen und analysieren Java Basics - Anfänger-Themen 7
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
F HashMap oder welches Array? Java Basics - Anfänger-Themen 4
T HashMap Java Basics - Anfänger-Themen 24
L Hashmap mit variablem Key Java Basics - Anfänger-Themen 9
M Collections Probleme mit Hashmap Java Basics - Anfänger-Themen 4
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
Z HashMap richtig benutzen Java Basics - Anfänger-Themen 2
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
E Hashmap Wert auslesen Java Basics - Anfänger-Themen 2
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
R Hashmap in anderer Klasse nicht benutzbar Java Basics - Anfänger-Themen 1
T Java Hashmap Java Basics - Anfänger-Themen 3
L Gibt es etwas wie "HashMap <String, String, String> Java Basics - Anfänger-Themen 9
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
O HashMap Fragen Java Basics - Anfänger-Themen 8
T HashMap Werte einfügen, durchsuchen und auslesen Java Basics - Anfänger-Themen 17
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
M HashMap keys ausgeben Java Basics - Anfänger-Themen 2
S In einer Hashmap Klassen regestrieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
G HashMap Java Basics - Anfänger-Themen 6
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M HashMap Frage Java Basics - Anfänger-Themen 3
M HashMap - put() reagiert nicht? Java Basics - Anfänger-Themen 8
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
F Hilfe bei der HashMap. Java Basics - Anfänger-Themen 3
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
B HashMap Java Basics - Anfänger-Themen 9
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
V Hashmap Iterieren Java Basics - Anfänger-Themen 4
C Csv File in Hashmap ausgeben Java Basics - Anfänger-Themen 14
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
I HashMap Java Basics - Anfänger-Themen 11
H Collections Brauche modifizierte HashMap Java Basics - Anfänger-Themen 6
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
A Datentypen Hashmap to Array Java Basics - Anfänger-Themen 11
D HashMap überschreibt Werte Java Basics - Anfänger-Themen 7
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
D erweiterte hashmap Java Basics - Anfänger-Themen 5
H HashMap<Int, String> - Er findet die Int-Klasse nicht. Java Basics - Anfänger-Themen 3
L HashMap zu JList Java Basics - Anfänger-Themen 6
S Erste Schritte HashMap Kurze Frage - Werte über Schleife ausgeben Java Basics - Anfänger-Themen 30
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6
B Klassen HashMap Zwei Objekte, gleicher Key Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben