Elemente in Vector nach Häufigkeit sortieren.

Status
Nicht offen für weitere Antworten.

Zimon

Mitglied
Hi folks.
Also steinigt mich und esst mich auf, weil ich euch mit soeinem evtl. einfachen unbedeutendem Problem belästige, aber ich habe aktuell ein Brett vorm Kopf!

Folgendes Problem:

Ich habe nen Vector, der String-Elemente enthält. Davon verschiedene in verschiedener Häufigkeit.
Nun möchte ich die Elemente so sortieren, dass das häufigste Element an die erste Stelle des Vectors verschoben wird, und alle doppelten von diesen anschließend gelöscht werden. Das zweihäufigste Element an 2. Stelle usw....

Beispiel:
Code:
static Vector<String> humm = new Vector();
public static void adden()
	{
		
		humm.add("blub");
		humm.add("sim");
		humm.add("pa");
		humm.add("blub");
		humm.add("blub");
		humm.add("pa");
		humm.add("fi");
	}
Nun sieht man, dass "blub" am häufigsten, also 3 mal vorkommt, "blub" soll also an die erste Stelle des vectors verschoben werden.
"pa" an die zweite Stelle und so fort, so dass mein Vector am Ende so aussieht:
humm("blub","pa","sim","fi")

Und das bekomm ich einfach nich hin.

Immo. siehts so aus:
Code:
	public static void sort()
	{
		count=1;
		maxcount=1;
		
		for(int i=0;i<humm.size();i++)
		{
			for (int a=i+1;a<humm.size();a++)
			{
				if (humm.elementAt(i).equals(humm.elementAt(a)))
				{
					count++;
					humm.remove(a);
				}
			}
			if (count>=maxcount)
			{
				maxcount = count;
				humm.add(i, humm.elementAt(i));
			}
			System.out.println(humm.elementAt(i));
		}
	}

aber das ist merkwürdiger Weise ne Endlosschleife^^.
Hoffe mir kann jemand weiter helfen, mfg
 
S

SlaterB

Gast
ohne eine zweite Datenstruktur kommst du nicht weit,
du musst dir ja für viele Strings die Länge merken,

das geht z.B. mit einer Map
String -> Anzahl,

erst die Liste durchlaufen und für jedes Vorkommen in der Map die Anzahl für dieses Wort erhöhen,

dann später die Map.Entry-Liste sortieren und deren Strings extrahieren
 

Zimon

Mitglied
Jau, danke schonmal.
Hab ne HashMap benutzt, mein Code sieht dann wie folg aus:
Code:
	public static void sort()
	{
		for(int i=0;i<humm.size();i++)
		{
			count=1;
			for (int a=i+1;a<humm.size();a++)
			{
				if (humm.elementAt(i).equals(humm.elementAt(a)))
				{
					count++;
					humm.removeElementAt(a);
					a--;
				}
			}
			blub.put(humm.elementAt(i), count);
			System.out.println(blub.entrySet());
		}
	}
Ausgegeben bekomm ich dabei:

[blub=3]
[blub=3, sim=1]
[blub=3, pa=2, sim=1]
[fi=1, blub=3, pa=2, sim=1]

Jetzt kann ich die wieder Sortieren und in ner Collection o.ä. abspeichern. Wenn ich dabei probleme bekomm, meld ich mich hier nochmal.
Ich markier den also mal noch nicht als gelöst.
 

Zimon

Mitglied
Tjoa,
gesagt, getan. Denn ich bekomm die obige Ausgabe, also "[fi=1, blub=3, pa=2, sim=1]" nicht sortiert.
Ich find nichtmal nen Ansatz dazu, denn ich kann ja nicht auf die Values 3, 2 und 1 zugreifen, nach denen ich das gerne absteigend sortiert hätte.
Wäre cool, wenn sich nochmal jemand meinem Problem annehmen könnte!

mfg, der Zim
 
G

Gelöschtes Mitglied 5909

Gast
Hab da mal was ähnliches für dich kopiert, is aber mit einlesen aus ner datei

Code:
TreeMap<String, Integer> words = new TreeMap<String, Integer>();
LineNumberReader lnr = new LineNumberReader(new FileReader(args[0]));
String line;
int lines = 0; //gesamte anzahl
do {
	line = lnr.readLine();
	if (line != null) {
		lines++;
		Integer counter = words.get(line);
		if (counter == null)
			words.put(line, 1);
		else
			words.put(line, counter.intValue() + 1);
	}
} while (line != null);
// Ausgabe
Iterator<String> iter = words.keySet().iterator();
while (iter.hasNext()) {
	String key = iter.next();
	System.out.println(key + + " " + words.get(key));
}
// Zeilenübersicht ausgeben
System.out.println("============");
System.out.println("Wörter: " + lines);
 

Marco13

Top Contributor
Ja, beim ersten Überfliegen würde ich sagen: das zählt jetzt die Vorkommen, aber gibt sie nicht sortiert aus.

Für eine sortierte Ausgabe könntest du dir den EntrySet der HashMap holen, und diese Entries in eine ArrayList einfügen, diese ArrayList kannst du dann mit
Collections.sort(list, new MyComparator());
sortieren, wobei "MyComparator" ein comparator ist, der zwei Map.Entry-Objekte nach ihrer Vealue sortiert.

Aber irgendwie hab ich das Gefühl, dass das insgesamt auch einfacher und effiienter gehen müßte ???:L
 

Marco13

Top Contributor
"Irgendwie müßte das doch mit einer TreeMap gehen" hab ich auch gedacht - die sortiert aber nach den Keys (d.h. den Wörtern) und nicht nach den Values (d.h. der Anzahl) ???:L
 

Wildcard

Top Contributor
Marco13 hat gesagt.:
"Irgendwie müßte das doch mit einer TreeMap gehen" hab ich auch gedacht - die sortiert aber nach den Keys (d.h. den Wörtern) und nicht nach den Values (d.h. der Anzahl) ???:L
Letztlich ist das eine Sache des Comparators.
Der kann ja auch den Value eines Keys aus der Map holen und den vergleichen.
 

Zimon

Mitglied
Marco13 hat gesagt.:
Ja, beim ersten Überfliegen würde ich sagen: das zählt jetzt die Vorkommen, aber gibt sie nicht sortiert aus.

Für eine sortierte Ausgabe könntest du dir den EntrySet der HashMap holen, und diese Entries in eine ArrayList einfügen, diese ArrayList kannst du dann mit
Collections.sort(list, new MyComparator());
sortieren, wobei "MyComparator" ein comparator ist, der zwei Map.Entry-Objekte nach ihrer Vealue sortiert.

Aber irgendwie hab ich das Gefühl, dass das insgesamt auch einfacher und effiienter gehen müßte ???:L

Demnach müsste ich MyComparator selbst schreiben...
Jetzt ist die Frage wie so ein Comparator aussieht, und im Prinzip müsste es doch schon Fertige Comparators für Integer-Werte geben oder nicht ?
Ich check dazu mal die api, und wenn keiner eine einfachere Idee hat, bleibt mir wohl nichts anderes, als das so mal zu versuchen.

Edit:

Ich steh heut etwas auf der Leitung, das holt mir doch die Einträge aus der HashMap in die ArrayList oder ?
arrayList.addAll(hashMap.entrySet());


Edit 2:

Ein Comparator für absteigende Integers würde also so aussehen:

import java.util.Comparator;

Code:
public class MyComparator implements Comparator<Integer> 
{

	public int compare(Integer o1, Integer o2) 
	{
		int value1 = o1.intValue();
		int value2 = o2;
		
		if(value1>value2)
		return -1;
		else if (value1==value2)
		return 0;
		else
		return 1;
	}

}

Edit3:

...was mir aber garnicht weiter hilft xD
Der soll ja die Values von Entrys vergleichen... wie mach ich das nu wieder -.-
 

Zimon

Mitglied
Also für alle dies nochma genau wissen wollen, der Comparator zum absteigenden sortieren nach Value sieht so aus:

Code:
import java.util.Comparator;
import java.util.Map;
import java.util.Map.Entry;



public class MyComparator implements Comparator<Map.Entry<String, Integer>> 
{
	public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
		int value1 = o1.getValue();
		int value2 = o2.getValue();
		
		if(value1>value2)
		return -1;
		else if (value1==value2)
		return 0;
		else
		return 1;
	}

}
 

Marco13

Top Contributor
Wildcard hat gesagt.:
Marco13 hat gesagt.:
"Irgendwie müßte das doch mit einer TreeMap gehen" hab ich auch gedacht - die sortiert aber nach den Keys (d.h. den Wörtern) und nicht nach den Values (d.h. der Anzahl) ???:L
Letztlich ist das eine Sache des Comparators.
Der kann ja auch den Value eines Keys aus der Map holen und den vergleichen.
Ich denke eben gerade NICHT. Der Baum wird ja auf Basis der Keys erst strukturiert (d.h. erst durch die Sortierung nach den Keys wird der Baum zum Baum). Aber ist schon spät - ausprobieren werd' ich das heute nichtmehr.

@Zimon: Ja - und damit müßte das ja jetzt funktionieren, oder?
 

Zimon

Mitglied
Jop, damit gehts.

Mal ne andere Frage:

Ne Methode die als Parameter das hat (File directory), was bewirkt das, wenn ich die mit ( new File (args[0])) aufrufe ?
 
S

SlaterB

Gast
eine Operation aufzurufen bewirkt, diese Operation aufzurufen, so dass diese ausgeführt wird,
nicht mehr und nicht weniger??
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
JavaJüngling beliebige Collection die Comperable Elemente enthält als Parameter Allgemeine Java-Themen 37
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
K Neue Elemente in JList einfügen Allgemeine Java-Themen 2
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
S GUI - Drag & Drop Elemente Allgemeine Java-Themen 10
J Elemente zu einer List hinzufügen? Allgemeine Java-Themen 9
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
M Elemente aus ArrayList, die in ArrayList ist Allgemeine Java-Themen 2
Z Elemente einer HashTabelle gezielt ansprechen Allgemeine Java-Themen 10
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
C Auf Oberflaechen Elemente zugreifen Allgemeine Java-Themen 8
Iron Monkey Array-Elemente Allgemeine Java-Themen 9
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
R Elemente eines Vectors [Java 1.4] Allgemeine Java-Themen 5
B Liste auf gleiche Elemente untersuchen? Allgemeine Java-Themen 2
C Auf ArrayList Elemente referenzieren? Allgemeine Java-Themen 17
M Progblem bei Zugriff auf Array Elemente Allgemeine Java-Themen 4
der JoJo [TreeSelection] wie bekomme ich alle Elemente Allgemeine Java-Themen 4
G Alle Möglichkeiten n Elemente Anzuordnen. Allgemeine Java-Themen 13
M Elemente aus Liste entfernen? Allgemeine Java-Themen 7
E Reihenfolge der Elemente einer ArrayList? Allgemeine Java-Themen 4
J Netbeans: wie auf grafische elemente zugreifen, andere Datei Allgemeine Java-Themen 2
B Nach Deserialisieren: Elemente des JFrames ohne Funktion Allgemeine Java-Themen 5
G Umkehrung der Array Elemente Allgemeine Java-Themen 2
K Elemente im ArrayList vergleichen Allgemeine Java-Themen 9
F Elemente überdecken sich! Allgemeine Java-Themen 13
G anzahl "verwendeter" elemente eines arrays ermitte Allgemeine Java-Themen 2
S alle elemente aus hashmap lesen Allgemeine Java-Themen 8
T Elemente eines Arrays mischen Allgemeine Java-Themen 5
C Collection, LinkedList, Elemente Allgemeine Java-Themen 4
S Einzelne Elemente in einer Bild Datei Allgemeine Java-Themen 5
A Vector Strings in Array splitten Allgemeine Java-Themen 6
G Fehler mit Vector Allgemeine Java-Themen 3
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U Vector aus Oberklasse spezialisieren Allgemeine Java-Themen 2
R Vector in JList Allgemeine Java-Themen 11
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
H Java Vector Frage Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
C Vector/Point-Problem Allgemeine Java-Themen 3
M Buffer-Vector einzeln und zusammen synchronisieren Allgemeine Java-Themen 4
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
X Vector Allgemeine Java-Themen 3
S 2D Vector speziell ausgeben. Allgemeine Java-Themen 2
S Vector in Vector gespeichert, wie greift man darauf zu? Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
S vector & strings Allgemeine Java-Themen 26
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
G JComponent in Vector - wie klonen? Allgemeine Java-Themen 7
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
S JList in Vector Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
H Vector<Character> zu char[] castern Allgemeine Java-Themen 2
T Element aus Vector entfernen Allgemeine Java-Themen 4
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
M get Funktion von Vector Allgemeine Java-Themen 4
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
V NullPointerException bei Vector Allgemeine Java-Themen 2
E einfache Frage zu Vector Allgemeine Java-Themen 8
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
G Vector addAll Allgemeine Java-Themen 5
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
MQue Vector Allgemeine Java-Themen 7
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
P Vector auf JTree Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
T Vector und remove? Allgemeine Java-Themen 13
T Vector in JAVA ? Allgemeine Java-Themen 10
P Vector in vielen Klassen Allgemeine Java-Themen 21
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Vector<State> Allgemeine Java-Themen 2
O hilfe bei Vector frage Allgemeine Java-Themen 6
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
H java.util.Vector langsam ? Allgemeine Java-Themen 5
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
N Java API java.util.vector Allgemeine Java-Themen 3
G Vector erweitern Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben