Skip to content

Instantly share code, notes, and snippets.

@parnell
Created May 23, 2013 19:20
Show Gist options
  • Save parnell/5638700 to your computer and use it in GitHub Desktop.
Save parnell/5638700 to your computer and use it in GitHub Desktop.
String append timings for different Java append methods.
package timings;
import java.util.Random;
public class StringTimings {
public static void main(String[] args){
stringComp();
}
private static void stringComp() {
int reps = 20;
String[] ar = new String[1];
long start;
int numMethods=4;
long total[] = new long[numMethods];
StringBuilder hsb = new StringBuilder("\t"); // header
StringBuilder psb[] = new StringBuilder[numMethods]; // %
StringBuilder tsb[] = new StringBuilder[numMethods]; // total
Random r = new Random();
for (int i=0;i<psb.length;i++){
psb[i] = new StringBuilder("% dif\t");
tsb[i] = new StringBuilder("avg time(ms)\t");
}
for (int n=10;n<=10000000;n*=10){
hsb.append(n+"\t");
for (int i=0;i<total.length;i++)
total[i] = 0;
for (int j=0;j<reps;j++){
int k =0;
start = System.currentTimeMillis();
float f;
start = System.currentTimeMillis();
for (int i=0;i<n;i++){
f = r.nextFloat();
ar[0] = stringSpeed1(f,f,f,f,f,f);
}
total[k++] += System.currentTimeMillis() - start;
start = System.currentTimeMillis();
for (int i=0;i<n;i++){
f = r.nextFloat();
ar[0] = stringSpeed2(f,f,f,f,f,f);
}
total[k++] += System.currentTimeMillis() - start;
start = System.currentTimeMillis();
for (int i=0;i<n;i++){
f = r.nextFloat();
ar[0] = stringSpeed3(f,f,f,f,f,f);
}
total[k++] += System.currentTimeMillis() - start;
// The following String.format is so much slower
// comment out for longer runs
start = System.currentTimeMillis();
for (int i=0;i<n;i++){
f = r.nextFloat();
ar[0] = stringSpeed4(f,f,f,f,f,f);
}
total[k++] += System.currentTimeMillis() - start;
}
long min = total[1];
for (int i=0;i<total.length;i++)
min = Math.min(min,total[i]);
for (int i=0;i<total.length;i++){
double avgpdif = 100.0*(total[i]-min)/min;
double avgtotal = (double)total[i]/reps;
tsb[i].append(avgtotal+"\t");
psb[i].append(avgpdif +"\t");
// System.out.println("avg time(ms)="+avgtotal+ " avg %dif="+avgpdif);
}
}
System.out.println(hsb.toString());
for (int i=0; i<psb.length;i++){
System.out.println(psb[i].toString());
}
System.out.println(hsb.toString());
for (int i=0; i<tsb.length;i++){
System.out.println(tsb[i].toString());
}
}
public static String stringSpeed1(float a, float b, float c, float x, float y, float z){
StringBuilder sb = new StringBuilder(72).append("[").append(a).append(",").append(b).append(",").append(c).append("][").
append(x).append(",").append(y).append(",").append(z).append("]");
return sb.toString();
}
public static String stringSpeed2(float a, float b, float c, float x, float y, float z){
StringBuilder sb = new StringBuilder().append("[").append(a).append(",").append(b).append(",").append(c).append("][").
append(x).append(",").append(y).append(",").append(z).append("]");
return sb.toString();
}
public static String stringSpeed3(float a, float b, float c, float x, float y, float z){
return "["+a+","+b+","+c+"]["+x+","+y+","+z+"]";
}
public static String stringSpeed4(float a, float b, float c, float x, float y, float z){
return String.format("[%f,%f,%f][%f,%f,%f]", a,b,c,x,y,z);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment