treeMap.putall funktioniert nicht?!

  • Themenstarter Gelöschtes Mitglied 34244
  • Beginndatum
G

Gelöschtes Mitglied 34244

Gast
Hallo,

ich bin gerade dabei eine Funktion zu schreiben, die die Wörter aus einem String nach ihren Vorkommnissen zählt und auflistet.
Also, z.b. für den String "Dies ist ein Test. Dies ist ein weiterer Test"
Dies 2
ist 2
ein 2
weiterer 1
Test 2

Dazu benutze ich eine HashMap. Um das ganze zu sortieren importiere ich die HashMap in eine TreeMap. Dabei stelle ich allerdings fest, dass in der TreeMap Werte zum großteil nicht übernommen werden. Vorher hatte die HashMap eine Größe von ca. 7000 Objekten und danach die TreeMap nur noch 129. Was mache ich da falsch?
UPDATE: Offensichtlich liegt das am ValueComparator, wenn ich diesen entferne wird alles ordnungsgemäß importiert
Hier mein Code:

Java:
	String[] input = db.getBodies();
HashMap<String, Integer> mostWords = new HashMap<String, Integer>();
        ValueComparator bvc =  new ValueComparator(mostWords);
        TreeMap<String,Integer> sorted_map = new TreeMap<String,Integer>(bvc);
        long totalWords = 0;
		for(int i=0;i<input.length;i++){
			String[] words = input[i].split(" ");
			totalWords += words.length;
			
			for(String word:words){
				if(mostWords.containsKey(word)){
					mostWords.put(word, mostWords.get(word)+1);
				} else {
					mostWords.put(word, 1);
				}
			}
		}
        Log.d(mostWords.size()); // ca. 7000
        sorted_map.putAll(mostWords);
        Log.d(sorted_map.size()); // 129????
        //Log.d("results: "+sorted_map);

Hier noch die Klasse ValueComparator:
Java:
public class ValueComparator implements Comparator<String>{
    Map<String, Integer> base;
    public ValueComparator(Map<String, Integer> base) {
        this.base = base;
    }

    public int compare(String a, String b) {
        return base.get(b).compareTo(base.get(a));
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Lumaraf

Bekanntes Mitglied
Eine TreeMap erlaubt keine doppelten Einträge. Wenn die Anzahl bei zwei Einträgen gleich ist gibt dein ValueComparator 0 zurück was beim Einfügen dazu führt das der schon vorhanden Wert mit dem neuen ersetzt wird.

Eine Map sollte immer nur nach den Keys strukturiert werden und nicht nach den Werten die diesen zugeordnet sind, das kann zu schwer vorhersehbaren verhalten führen.

Ich würde alle Einträge der Map als Array holen und das einfach sortieren.

Java:
Entry<String,Integer>[] words=mostWords.entrySet().toArray(new Entry<String,Integer>[mostWords.size()]);
Arrays.sort(words,new Comparator<Entry<String,Integer>>() {
    public int compare(Entry<String,Integer> a, Entry<String,Integer> b) {
        return a.getValue()-b.getValue();
    }
});
 
S

SlaterB

Gast
die compare-Methode wird hier als endgültige Entscheidung genommen, kein einfaches Objekt-compare danach noch,
wenn gleine Anzahl, dann als absolut gleich angenommen,

prüfe in deiner compare-Methode, ob Anzahl unterschiedlich, dann das als Ergebnis zurückgeben,
sonst noch die Strings normal vergleichen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
B Collections TreeSet/TreeMap, doppelte Einträge zulassen ? Allgemeine Java-Themen 11
0 mittleres Element aus TreeMap Allgemeine Java-Themen 5
0 Datentypen TreeMap nach Color sortiert (kd-Baum) Allgemeine Java-Themen 8
J Vorsortieren für TreeMap Allgemeine Java-Themen 7
W Comparator oder TreeMap? Allgemeine Java-Themen 10
C Reihenfolge einer SortedMap/TreeMap umkehren Allgemeine Java-Themen 3
D Probleme beim schreiben / lesen in TreeMap Allgemeine Java-Themen 9
B TreeMap Index !!! Allgemeine Java-Themen 6
J Eindeutige ID für Objekte als Keys in TreeMap Allgemeine Java-Themen 12
P Große Datenmenge wie speichern (HashMap? TreeMap?) Allgemeine Java-Themen 11
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
T [TreeMap] Corresponding value to a key Allgemeine Java-Themen 10
D WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
Lukas2904 Wie funktioniert ein KeyLogger? Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
bueseb84 FolderWatcher mit WatchService funktioniert nur bedingt Allgemeine Java-Themen 5
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Wie konkret funktioniert das Modulsystem unter Java 11? Allgemeine Java-Themen 4
J Neuronales Netz funktioniert mal und mal nicht. Allgemeine Java-Themen 3
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
J FTPSClient funktioniert nicht Allgemeine Java-Themen 4
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
M Operatoren Warum funktioniert diese überprüfung nicht? Allgemeine Java-Themen 7
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
RalleYTN requires transitive funktioniert nicht? Allgemeine Java-Themen 7
R Bruteforce hashes mit multithreading. Funktioniert das so? Allgemeine Java-Themen 0
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
J Exclude funktioniert nicht Allgemeine Java-Themen 2
K .jar funktioniert nicht vollständig Allgemeine Java-Themen 1
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
O Fahrenheit/Celsius Converter funktioniert nicht Allgemeine Java-Themen 2
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
U PersistenceManager.createEntityManager funktioniert nicht Allgemeine Java-Themen 3
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
JG12111989 Auswertung von Fragebogen funktioniert nicht! Allgemeine Java-Themen 7
M Primzahlberechnung funktioniert nicht. Allgemeine Java-Themen 4
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
A Debugger im Java-Editor funktioniert nicht Allgemeine Java-Themen 5
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
F JTextField funktioniert nicht Allgemeine Java-Themen 6
Athena Programm funktioniert nur beim Debugging korrekt, sonst nicht. Allgemeine Java-Themen 1
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
G Verschlüsselungsalgorythmus funktioniert nicht Allgemeine Java-Themen 2
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
W getResources funktioniert nur in Eclipse, nicht in JAR Allgemeine Java-Themen 2
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M exec() funktioniert nicht Allgemeine Java-Themen 1
M RC4-Chiffre (funktioniert eingeschränkt) Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben