VD>Сначала результатаы (AMD Атлон 64 3500 (2.2 Ггц):
VD>VD>[123, 345, asdf, 23453, asdfas]
VD>00:00:00.8376620
VD>5000000
VD>00:00:00.2925531
VD>5000000
VD>00:00:00.7282637
VD>5000000
VD>
второй тест некорректен т.к. substring не делает.
вот результаты java. cpu = AMD Opteron 244 (1792.154Mhz). linux. jvm — sun, 1.5.0, 32bit.
используется только одно ядро, плюс надо бы сделать поправку на меньшую частоту камня...
$ java -server -Xmx512m -Xms512m -cp . Test08
5000000
1096.069
5000000
816.764
5000000
799.736
5000000
804.585
5000000
825.1
-------------
5000000
420.443
5000000
400.156
5000000
502.719
5000000
494.193
5000000
492.967
import java.io.*;
import java.util.*;
class Test08 {
private static int test() {
int answer = 0;
final List<String> list = new ArrayList<String>();
final String text = "123 345 asdf 23453 asdfas".intern();
for (int i = 0; i < 1000000; i++) {
list.clear();
for (final StringTokenizer strtok = new StringTokenizer(text);
strtok.hasMoreTokens(); list.add(strtok.nextToken())) ;
answer += list.size();
}
return answer;
}
private static int test1() throws UnsupportedEncodingException {
int answer = 0;
final String [] array = new String[5];
final String text = "123 345 asdf 23453 asdfas".intern();
final byte space = " ".getBytes("windows-1251")[0];
final byte [] chars = text.getBytes("windows-1251");
final int clen = chars.length;
for (int i = 0, l = 0; i < 1000000; i++, l = 0) {
for (int c = 0, x = 0; c < chars.length; c++) {
if (chars[c] == space) {
array[l++] = text.substring(x, c);
x = c + 1;
} else if (c == chars.length - 1 && clen - x > 1) {
array[l++] = text.substring(x, clen);
}
}
answer += l;
}
return answer;
}
public static void x() {
long start = System.nanoTime();
System.out.println(test());
System.out.println((double)(System.nanoTime() - start) / 1.0e6);
}
public static void y() throws UnsupportedEncodingException {
long start = System.nanoTime();
System.out.println(test1());
System.out.println((double)(System.nanoTime() - start) / 1.0e6);
}
public static void main(String [] args) throws UnsupportedEncodingException {
for (int i = 0; i < 5; i++) x();
System.out.println("-------------");
for (int i = 0; i < 5; i++) y();
}
}