axeljaeger
20-07-2003, 12:56
Hallo zusammen,
nach dem Lesen der Lektüre "Making Java Performance" von Sebastian Ritter (gibt's kostenlos bei www.bastie.de) bin ich bemüht, meine Javaprogramme auf Geschwindigkeit zu optimieren. Sebastian Ritter schreibt, es ist günstiger, eine ArrayList oder einene Vector in ein Array umzuwandeln, wenn man häufig auf die Eintrage zugreifen muss. Ich wollte jetzt ein kleines Testprogramm schreiben, das diese Aussage überprüft. Leider scheitere ich beim casten von Object [] auf String []. Der Code kompilier zwar ohne zu murren, aber ich bekomme eine Exception zur Laufzeit
import java.util.ArrayList;
class ArrayTest
{
public static void main(String [] args)
{
// Beispieleinträge
ArrayList arraylist = new ArrayList();
for(int i = 0; i < 10000; i++)
arraylist.add(String.valueOf(i));
// ArrayList direkt
long starttime = System.currentTimeMillis();
String tmp;
for(int i = 0; i < 10000; i++)
tmp = (String)arraylist.get(i);
System.out.println("Iterate over arraylist spend " + (System.currentTimeMillis() - starttime));
// ArrayList erst in Array kopieren
String [] array = (String [])(arraylist.toArray()); // <-- Das gibt eine Exception in thread "main"
// java.lang.ClassCastException: [Ljava.lang.Object;
starttime = System.currentTimeMillis();
for(int i = 0; i < 10000; i++)
tmp = array[i];
System.out.println("Iterate over array spend " + (System.currentTimeMillis() - starttime));
}
}
java-version sagt folgendes:
[axel@tecton Documents]$ java -version
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
[axel@tecton Documents]$
nach dem Lesen der Lektüre "Making Java Performance" von Sebastian Ritter (gibt's kostenlos bei www.bastie.de) bin ich bemüht, meine Javaprogramme auf Geschwindigkeit zu optimieren. Sebastian Ritter schreibt, es ist günstiger, eine ArrayList oder einene Vector in ein Array umzuwandeln, wenn man häufig auf die Eintrage zugreifen muss. Ich wollte jetzt ein kleines Testprogramm schreiben, das diese Aussage überprüft. Leider scheitere ich beim casten von Object [] auf String []. Der Code kompilier zwar ohne zu murren, aber ich bekomme eine Exception zur Laufzeit
import java.util.ArrayList;
class ArrayTest
{
public static void main(String [] args)
{
// Beispieleinträge
ArrayList arraylist = new ArrayList();
for(int i = 0; i < 10000; i++)
arraylist.add(String.valueOf(i));
// ArrayList direkt
long starttime = System.currentTimeMillis();
String tmp;
for(int i = 0; i < 10000; i++)
tmp = (String)arraylist.get(i);
System.out.println("Iterate over arraylist spend " + (System.currentTimeMillis() - starttime));
// ArrayList erst in Array kopieren
String [] array = (String [])(arraylist.toArray()); // <-- Das gibt eine Exception in thread "main"
// java.lang.ClassCastException: [Ljava.lang.Object;
starttime = System.currentTimeMillis();
for(int i = 0; i < 10000; i++)
tmp = array[i];
System.out.println("Iterate over array spend " + (System.currentTimeMillis() - starttime));
}
}
java-version sagt folgendes:
[axel@tecton Documents]$ java -version
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
[axel@tecton Documents]$