Map und iterator

Status
Nicht offen für weitere Antworten.

---

Aktives Mitglied
Hallo,

mein Problem ist folgendes:
Ich möchte die zwei längsten Einträge aus einer Map (hier nur die Key Values) in jeweils einem String speichern.
Die Map sieht so aus:
Map<String, List<String>> map = new TreeMap<String, List<String>>();

Hierzu habe ich jetzt die keys absteigend sortiert (mit eurer Hilfe, funktioniert das jetzt).
Im nächsten Schritt möchte ich die zwei ersten Einträge der sortierten Map in Strings speichern. Hier ist jetzt das Problem, wie ich den ersten und zweiten Eintrag der map bekomme. Ich habe keine Methode getFirst oder so gefunden auch der Iterator hat keine Methode wie first oder last.
Ist die Vorgehensweise überhaupt OK?

private void SortMap()
{

map = new TreeMap<String, List<String>>(new Comparator<String>(){
@Override
public int compare(String str1, String str2) {
return str2.length() - str1.length();} });
map.putAll(wordList);
System.out.println(map.keySet());
}
private void initCW()
{
String w1 = null;
String w2 = null;
SortMap();

Iterator it = map.iterator();
w1 = it.

}

schon mal vielen Dank!
 

0x7F800000

Top Contributor
Hierzu habe ich jetzt die keys absteigend sortiert (mit eurer Hilfe, funktioniert das jetzt).
Im nächsten Schritt möchte ich die zwei ersten Einträge der sortierten Map in Strings speichern.
Pfui!!! :mad: Was hast du dir denn dabei bitte gedacht? Wenn du nur zwei Einträge brauchst, dann musst du doch nicht DIE GANZE MAP sortieren :eek:

Sortieren dauert O(n ln(n)), die zwei längsten aussuchen kann man wesentlich einfacher und wesentlich schneller in O(n) ohne die ganze sortiererei und comparator-rumgemurkse.

Du kannst die Schlüssel mit keySet() wieder rausholen (dann müsstest du übrigens nochmal umsonst sortieren^^)

Du solltest stattdessen einfach nur den keyset durchgehen, und immer zwei besten in einer temporären variable abspeichern, und dann per get() wieder die entsprechenden Einträge rausholen.
 

---

Aktives Mitglied
Danke!
Hab mir gar keine Gedanken über Performance gemacht, versuche jetzt Deinen Vorschlag umzusetzen.
Methode mit längstem Wort hab ich hinbekommen.

String getLongestWord()
{
String longestWord = null;
int longest = 0;
for(Iterator it = wordList.keySet().iterator(); it.hasNext();)
{
String nextWord = (String)it.next();
if(nextWord.length() > longest)
{
longest = nextWord.length();
longestWord = nextWord;
}
}
return longestWord;
}

Wie ermittle ich aber das Zweitlängste?

String[] get2LongestWords()
{
String longestWord[] = null;
int longest = 0;
int sec = 0;

for(Iterator it = wordList.keySet().iterator(); it.hasNext();)
{
String nextWord = (String)it.next();
if(nextWord.length() > longest)
{
longest = nextWord.length();
longestWord[0] = nextWord;
}
//?? longestWord[1] wäre zweitlängstes
}
return longestWord;
}
 

0x7F800000

Top Contributor
glaubst du dein code sieht ohne codetags mit den ganzen Smileys sympathischer aus?^^ :p

Also, hier sind ein paar vorschläge:
Code:
import java.util.*;
public class _{
	
	//ALLGEMEINE VARIANTE
	public static <T> List<T> getLeading(Collection<T> collection, int k, Comparator<T> comp){
		TreeSet<T> tree=new TreeSet<T>(comp);
		Iterator<T> collectionIterator=collection.iterator();
		while(tree.size()<k && collectionIterator.hasNext()){
			tree.add(collectionIterator.next());
		}
		while(collectionIterator.hasNext()){
			tree.add(collectionIterator.next());
			tree.pollFirst();	// <---kleinstes schon unterwegs kicken! kostet nix, spart zeit
		}
		return new LinkedList<T>(tree);
	}
	
	//SCHNELLE VARIANTE
	public static String[] getLeadingTwo(Collection<String> collection, Comparator<String> comp){
		String[] result=new String[2];
		
		Iterator<String> i=collection.iterator();
		
		if(!i.hasNext()) 
			return result;	//alles leer, was'n scheiß...
		else
			result[1]=i.next();	//erstbeste
		
		String nextCandidate;
		while(i.hasNext()){
			if(comp.compare(nextCandidate=i.next(),result[1])>0){
				//candidat ersetzt den ersten, erste wird zum zweitbesten, zweitbeste wird verworfen
				result[0]=result[1]; result[1]=nextCandidate;
			}
		}
		
		return result;
	}
	
	//TEST
	public static void main(String... _){
		
		//test collection mit integer-stringrepresentationen füllen
		Random r=new Random(0);
		List<String> collection=new LinkedList<String>();
		for(int i=0; i<15; i++) collection.add(String.valueOf(r.nextInt(15)));
		System.out.println(collection);
		
		//comparator
		Comparator<String> comp=new Comparator<String>(){
			@Override
			public int compare(String a, String b){
				if(a.length()!=b.length()){
					return a.length()-b.length();
				}else{
					return a.compareTo(b);
				}
			}
		};
		
		//mit der fachidiotischen methode erste 5 rausziehen
		System.out.println(getLeading(collection,5,comp));
		
		//mit der billigen methode erste 2 rausziehen
		System.out.println(Arrays.toString(getLeadingTwo(collection,comp)));
		
		//so sieht's sortiert aus
		Collections.sort(collection,comp);
		System.out.println(collection);
		
		
	}
}

Also: alles ist konsequent aufsteigend sortiert, kannst es natürlich auch alles umändern wenn du willst, ich find's halt irgendwie übersichtlicher dass größere sachen auch weiter rechts stehen bzw die höchsten Indizes im Array haben, statt dieser Olympiasieger-Nummerierung.
 
Zuletzt bearbeitet von einem Moderator:

---

Aktives Mitglied
Danke!
Warum machst Du die Methoden eigentlich static?

Das mit den smilies war keine Absicht, hatte eigentlich nach codetags gesucht..
wo schaltet man die codetags ein?
 

0x7F800000

Top Contributor
Warum machst Du die Methoden eigentlich static?
allgemeine methoden, die nichts mit den Konkreten Instanzen zu tun haben, die macht man halt static, und normalerweise lagert man sie sogar in extra hilfsklassen aus, wie etwa Math/Arrays/Collections und sowas.

Das mit den smilies war keine Absicht, hatte eigentlich nach codetags gesucht..
wo schaltet man die codetags ein?
ääh, nach dem Umzug ist das alles hier bisher das pure Chaos^^ Im WYSIWYG-Editor ist das so ein "#"-Button, imho auch nicht allzu vielsagend. Aber bald kommen neue bunte codetags, da hockt der Vladimir schon dran :)
 

---

Aktives Mitglied
Nochmal danke!
Hab wohl aber auch Probleme mit den Augen, find keinen # Button. Aber wenns eh noch geändert wird, werd ichs evtl finden...
 

0x7F800000

Top Contributor
kannst auf jeden Fall [€ODE]...[/€ODE] direkt hinschreiben, wo der verdammte Buton ist dürfte dann ja egal sein ;)
 

---

Aktives Mitglied
Danke!
Ich hätte (bei meiner Antwort um 17.55 ) dabei schreiben sollen, dass ich
Code:
getippt habe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
N Warum Springt iterator nur in der Schleife weiter Java Basics - Anfänger-Themen 9
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
J Methoden iterator for-schleife (hasNext() ) Java Basics - Anfänger-Themen 7
Stargirlxo Iterator + Methode Java Basics - Anfänger-Themen 10
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Iterator erneut! Java Basics - Anfänger-Themen 8
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
K Iterator zurückliefern Java Basics - Anfänger-Themen 8
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
S Iterator einer Liste Java Basics - Anfänger-Themen 4
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
I Erste Schritte Iterator Java Basics - Anfänger-Themen 3
M Iterator funktioniert nicht Java Basics - Anfänger-Themen 5
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
O Interface Iterator Java Basics - Anfänger-Themen 2
M Collections Frage Beispielprogrammierung Iterator Java Basics - Anfänger-Themen 13
M Iterator Java Basics - Anfänger-Themen 25
J Iterator Funktioniert nicht richtig in StackImplementierung Java Basics - Anfänger-Themen 3
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
L Iterator Java Basics - Anfänger-Themen 1
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
OnDemand Iterator Interfacve Java Basics - Anfänger-Themen 23
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
T Methoden Iterator über ArrayList Java Basics - Anfänger-Themen 3
W Iterator Java Basics - Anfänger-Themen 2
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
R Mit iterator auf Element zugreifen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
F Wie Werte einer ArrayList an einen 'Custom'-Iterator übergeben? Java Basics - Anfänger-Themen 2
J Iterator Java Basics - Anfänger-Themen 5
P ArrayList mit Iterator / Iterable ausgeben Java Basics - Anfänger-Themen 8
B Funktionsweise Iterator unklar Java Basics - Anfänger-Themen 7
A Datentypen Iterator von hinten nach vorne durchlaufen Java Basics - Anfänger-Themen 4
D Wie Iterator Remove implementieren? Java Basics - Anfänger-Themen 11
B Datentypen Inhalt zum Iterator wieder aufrufen? Java Basics - Anfänger-Themen 10
D Iterator schaltet nicht weiter?! Java Basics - Anfänger-Themen 5
A Problem mit Iterator Java Basics - Anfänger-Themen 2
B Türme von Hanoi - Iterator Java Basics - Anfänger-Themen 50
V Hilfe beim implementieren von Iterator Java Basics - Anfänger-Themen 5
W Collections Iterator<E> Java Basics - Anfänger-Themen 7
L Lokale Variable und Instanzvariable innerhalb Iterator Java Basics - Anfänger-Themen 8
W OOP problem mit iterator! -.- Java Basics - Anfänger-Themen 9
B Iterator und Collection Java Basics - Anfänger-Themen 11
ruutaiokwu Iterator oder .size ??? Java Basics - Anfänger-Themen 6
vandread Iterator zählt nicht hoch?! Java Basics - Anfänger-Themen 3
L Problem mit Iterator bzw. Sortierte Liste Java Basics - Anfänger-Themen 14
N HashMap mit Iterator durchlaufen Java Basics - Anfänger-Themen 11
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
J Verschachtelte for-Schleife mit Löschen von Iterationen. Wie über Iterator abbilden? Java Basics - Anfänger-Themen 6
M Iterator Java Basics - Anfänger-Themen 15
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
M Eigener Iterator für LinkedList Java Basics - Anfänger-Themen 20
pun Iterator über ArrayList Java Basics - Anfänger-Themen 12
P Iterator.add() Java Basics - Anfänger-Themen 3
A For Schleife - Iterator wird null Java Basics - Anfänger-Themen 7
0x7F800000 ungereimtheiten mit Iterator/ListIterator Java Basics - Anfänger-Themen 2
N "Dynamischer" Iterator Java Basics - Anfänger-Themen 21
J Iterator remove()? Java Basics - Anfänger-Themen 5
T Liste mit Iterator auslesen Java Basics - Anfänger-Themen 11
Kr0e Iterator Java Basics - Anfänger-Themen 2
D iterator instanziieren! Java Basics - Anfänger-Themen 11
M Der Umgang mit Iterator - Wie ein Objekt aus einer ArrayList Java Basics - Anfänger-Themen 2
J ArrayList mit Iterator Java Basics - Anfänger-Themen 3
W Iterator in Queue Java Basics - Anfänger-Themen 5
A Für was Iterator ? Java Basics - Anfänger-Themen 3
M warum interface iterator verwendbar? Java Basics - Anfänger-Themen 5
O Iterator - Durchlauf "einschränken" bzw. steuern&q Java Basics - Anfänger-Themen 2
K Collection und Iterator Java Basics - Anfänger-Themen 7
Q Iterator next erstellen Java Basics - Anfänger-Themen 4
S iterator problem Java Basics - Anfänger-Themen 3
S Iterator --__-- Zugriff auf nächstes Element Java Basics - Anfänger-Themen 5
N Set + Iterator oder doch nur zu blöd API zu lesen Java Basics - Anfänger-Themen 32
R Java 5.0 neue For schleife Iterator was ist der fehler? Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
R Iterator und HashMap Java Basics - Anfänger-Themen 10
G Probleme mit Iterator Java Basics - Anfänger-Themen 2
E umgededrehte if anweisung funzt nicht , iterator. Java Basics - Anfänger-Themen 2
A Iterator, wie funkioniert das richtig? Java Basics - Anfänger-Themen 6
S Iterator Schreibweise Java Basics - Anfänger-Themen 7
P ArrayList, iterator: Fehler in while Schleife Java Basics - Anfänger-Themen 2
T Iterator Java Basics - Anfänger-Themen 8
G Frage zur Iterator ? Java Basics - Anfänger-Themen 12
A Iterator auf anfang setzen Java Basics - Anfänger-Themen 5
blackfeet Bildfadeffekt (Halptransparenz) & iterator Java Basics - Anfänger-Themen 8
C Problem mit verschachteltem Iterator Java Basics - Anfänger-Themen 2
R Problem mit Iterator Java Basics - Anfänger-Themen 6
M Problem mit Iterator.remove() Java Basics - Anfänger-Themen 5
R Enumeration oder Iterator? Java Basics - Anfänger-Themen 2
J Klasse Iterator Java Basics - Anfänger-Themen 5
D unregelmäßige NullPointerException bei LinkedList Iterator? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben