EDIT >>> Auf Vorschlag des Verfassers wurde dieser Thread-Teil in einen eigenen Thread mit neuem Titel verschoben <<< EDIT <<<
In einem anderen Forum hatte Landei diesen Thread gestartet, den ich für eine ziemlich gute Idee halte. Da es das andere Forum nun ja nicht mehr gibt möchte ich den Thread hier wiederbeleben.
Ich fange dann hier auch mal an, und zwar mit einer Performance-Angelegenheit die ich letztens bemerkt habe: Die automatische Überprüfung von Arraygrenzen scheint in Java schnarchlangsam zu sein… Das sollte man wohl besser manuell erledigen.
Aufgefallen ist mir das als ich verschiedene Methoden testete um Arrays zu vergleichen. Der Effekt lässt sich bei diesem Codeschnipsel prima beobachten:
public class ComparatorSpeedTest {
static byte[] array1, array2;
public static void main(String[] args) {
long startTime, endTime;
array1 = new byte[10000];
array2 = new byte[10000];
Arrays.fill(array1, (byte)0);
Arrays.fill(array2, (byte)0);
array1[8000] = 1;
array2[8000] = 2;
startTime = System.currentTimeMillis();
for(int i=0; i<1_000_000; i++) {
compareBytewise1(array1, array2);
}
endTime = System.currentTimeMillis();
System.out.println("time: "+(endTime-startTime));
}
public static int compareBytewise1(byte[] a1, byte[] a2) {
int index = 0;
byte value1, value2;
do {
value1 = a1[index];
value2 = a2[index];
index++;
} while( (value1 == value2) && (index < a1.length) );
return index;
}
public static int compareBytewise2(byte[] a1, byte[] a2) {
int index = 0;
byte value1, value2;
do {
value1 = a1[index];
value2 = a2[index];
index++;
} while( value1 == value2 );
return index;
}
}
Der einzige Unterschied zwischen den beiden Comparator-Methoden ist, das eine die Einhaltung der Arraygrenzen von array1 von sich aus sicherstellt und die andere nicht. Der Ergebnis hat mich schon verblüfft.
Comparator 1, mit manueller Überprüfung: 5,6 Sekunden
Comparator 2, mit automatischer Überprüfung: 14,6 Sekunden
Na, da hat sich die extra Operation im while(…) doch wohl gelohnt!