# Iterierung verschlingt ungeheuer viel Zeit



## AtlanTK (1. Dez 2011)

Hi
ich habe ein Programm, das eine Log Datei mit 36000 Zeilen auswertet. Diese werden analysiert und in eine HashMap gespeichert. Muster:

```
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.


```
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:


```
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


----------



## maki (1. Dez 2011)

Mach mal output zu einem StringBuilder anstatt zu einem String.


----------



## jgh (1. Dez 2011)

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  Schiebung


----------



## AtlanTK (1. Dez 2011)

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.


----------



## SlaterB (1. Dez 2011)

es heißt s&c&p,
suchen kannst du das auch noch, schnell Beispiele zu finden


----------



## maki (1. Dez 2011)

Hättest auch gleich sagen können dass es sich um eine hausaufgabe handelt...

*verschoben*

Let me google that for you


----------



## AtlanTK (1. Dez 2011)

SlaterB hat gesagt.:


> es heißt s&c&p,
> suchen kannst du das auch noch, schnell Beispiele zu finden



Gut xD
Alleine wegen diesem Kommentar suche ich jetzt!
Danke nochmal an alle


----------



## AtlanTK (1. Dez 2011)

maki hat gesagt.:


> Hättest auch gleich sagen können dass es sich um eine hausaufgabe handelt...
> 
> *verschoben*
> 
> Let me google that for you



Das kränkt mich jetzt!
es ist ekine Hausaufgabe das Timing Problem zu Lösen!
Wir sollen einen Apache Log Reader entwickeln.
Bitte verurteile mich nicht, weil ich nicht lange suchen wollte.
Angefangen zu suchen hatte ich ja schon.


----------



## maki (1. Dez 2011)

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


----------



## fastjack (1. Dez 2011)

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


----------



## SlaterB (1. Dez 2011)

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 (2. Dez 2011)

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.


----------



## AtlanTK (2. Dez 2011)

Dann ist er ja froh xD


----------

