Hohe Laufzeit bei for-Schleifen verhindern

Wenn man nach irgendwelchen Werten beispielsweise in einem Array suchen will, dann verwenden viele ungeübte Programmierer die folgende Methode:

// Array initialisieren
String[] searcharray = {"Gustav", "Anton", "Heinrich", "Maximilian", "Bertha"};

// Suche nach "Anton"
boolean gefunden = false;

for(int i = 0; i < searcharray.length; i++) {
	if(searcharray[i].equals("Anton")) gefunden = true;
}

System.out.println("Gefunden: " + gefunden);

Diese Methode ist zwar akzeptabel, denn es findet das Element auf jeden Fall. Doch hierbei gibt es ein kleines Problem: Die Schleife durchläuft das Array vom Anfang bis zum Ende. Dies verursacht hohe Zeitkosten!

Viel besser wäre es abzubrechen, falls das Element bereits gefunden wurde. Dies ermöglicht folgender Code-Block:


// Array initialisieren
String[] searcharray = {"Gustav", "Anton", "Heinrich", "Maximilian", "Bertha"};

// Suche nach "Anton"
boolean gefunden = false;

int i = 0;
do {
	if(searcharray[i].equals("Anton")) gefunden = true;
	i++;
} while(gefunden == false && i < searcharray.length + 1);

System.out.println("Gefunden: " + gefunden);

Was ist der Unterschied? Die do-while-Schleife wird als erstes auf jeden Fall aufgerufen. Danach wird geprüft, ob sich “Anton” an der gegebenen Stelle i befindet. Sobald dies der Fall ist, wird die Variable gefunden auf true gesetzt.

Nun prüft die do-while-Schleife, ob gefunden == false ist. Wenn also Anton gefunden wurde, müssen “Heinrich”, “Maximilian und “Bertha” nicht mehr überprüft werden.

Bei hunderten oder tausenden von Datensätzen wird somit eine schnellere Laufzeit erzielt. Am schlimmsten ist es, wenn sich das gesuchte Element ganz hinten befinden. Am besten ist es, wenn sich das Element am Anfang befindet.