Iterierung verschlingt ungeheuer viel Zeit

AtlanTK

Mitglied
Hi
ich habe ein Programm, das eine Log Datei mit 36000 Zeilen auswertet. Diese werden analysiert und in eine HashMap gespeichert. Muster:
Code:
HashMap<String, ArrayList<String>>
________(IP)__, (Pfade, auf die die IP zugreift)

Die gesamtzahl aller Pfade ist 36000.
IP's sind es 533.

Ich will jetzt den Inhalt ausgeben, indem ich durch die HashMap iteriere und innerhalb jedes durchgangs durch die ArrayList. Dabei hänge ich den Inhalt der ArrayList an einen ausgabestring an.

Code:
String output = "";
for(String elem : ipMap.keySet()){
	output += elem.toString();
	output += "\n";
	for (String list : ipMap.get(elem)) {
		System.out.println(counter);
		output = output + list;
		output = output + "\n";
	}
	output += "\n";
}

Ich bekomme leider ein Zeit Problem, wenn ich folgende Zeilen einfüge:

Code:
		output = output + list;
		output = output + "\n";

Vorher dauert das durchlaufen der Schleife ca. 3 Sekunden.
Danach länger als 30.

Ich brauche dringend Hilfe!
Vielen Dank imvoraus,
Luca M. Nixdorf
 

jgh

Top Contributor
String ist sehr aufwendig, verwende anstelle dessen lieber einen StringBuilder auf dem du am Ende dann die toString() Methode aufrufen kannst!

EDIT: Der Mod hat sich vorgedrängelt :D Schiebung
 

AtlanTK

Mitglied
Soetwas habe ich noch nie benutzt. Könntet ihr mir evtl. ein Beislpiel geben?
Ich muss das morgen weiterverarbeiten und habe keine Zeit.
Wäre echt super.
Bin zwar kein Freund von c&p,
aber es muss diesmal sein.
 
M

maki

Gast
Hi AtlanTK,

es ist ekine Hausaufgabe das Timing Problem zu Lösen!
ob "hausaufgabe" oder "praktikumsarbeit" ist mir ziemlich egal, geht dabei eher um das Niveau der frage und/oder die Motivation bzw Grundhaltung des Fragestellers.

Bitte verurteile mich nicht, weil ich nicht lange suchen wollte.
sorry, aber das kann ich nicht.
Mache ich aber bei jedem der nicht suchen will, suchen bzw. recherchieren gehört zum Job eines SW Entwicklers.

Ist aber nicht allzu persönlich zu nehmen ;)
 
Zuletzt bearbeitet von einem Moderator:

fastjack

Top Contributor
Wenn das mit dem String noch nicht genug geholfen hat, verwende eine index-basierte Schleife im inneren Teil.

[edit]
Das System.out... im Inneren kann auch ein Problem darstellen. Wenn man sowas braucht, dann gibt nur jeden 1000. oder 10000. Eintrag aus, aber nicht jeden counter.
[/edit]

P.S.: edit sieht ja jetzt fein aus ;)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
was sollte eine index-basierte Schleife im inneren Teil bringen?
denke nicht dass das mehr als ms im ewig langen Ablauf sind, wenn überhaupt schneller
 

fastjack

Top Contributor
Hast recht ;) In dem Fall ist das sogar noch langsamer als for-each (Jubelrufe jetzt bitte). Mit dem StringBuilder ist er schon mal gut bedient.
 

Neue Themen


Oben