// StringBuildTest.java SJ import java.util.ArrayList; import java.util.Vector; import java.util.LinkedList; import java.util.List; import java.util.Collection; import java.util.TreeSet; import java.util.HashSet; import java.util.*; public class StringBuildTest { public static void main(String[] args) { int N = 10, M = 3; DsaTimer a = new DsaTimer("Total"); StringBuildTest l = new StringBuildTest(); if (args.length > 0) N = Integer.valueOf(args[0]); if (args.length > 1) M = Integer.valueOf(args[1]); System.out.println("n Vector.toString StringBuffer StringBuilder2 stringStringBuilder3 + (microsec)"); for (int i = 16; i < N; i*=2) { l.test(i, M); } System.out.println(a); } // main() void test(int n, int m) { // create input Vector v = new Vector(n); for (int i = 0; i < n; i++) v.add(i); long[] times = new long[6]; // long[] prevtimes = new long[6]; for (int i = 0; i < 6; i++) times[i] = Long.MAX_VALUE; DsaTimer a; String s; long ai; for (int j = 0; j < m; j++) { a = new DsaTimer("Vector.toString"); s = v.toString(); ai = a.stop(); if (ai < times[0]) times[0] = ai; if (n < 10) System.out.println(s); a = new DsaTimer("vector2stringStringBuffer"); s = vector2stringStringBuffer(v); ai = a.stop(); if (ai < times[1]) times[1] = ai; if (n < 10) System.out.println(s); a = new DsaTimer("vector2stringStringBuilder"); s = vector2stringStringBuilder(v); ai = a.stop(); if (ai < times[2]) times[2] = ai; if (n < 10) System.out.println(s); a = new DsaTimer("vector2stringStringBuilder2"); s = vector2stringStringBuilder2(v); ai = a.stop(); if (ai < times[3]) times[3] = ai; if (n < 10) System.out.println(s); a = new DsaTimer("vector2stringStringBuilder3"); s = vector2stringStringBuilder3(v); ai = a.stop(); if (ai < times[4]) times[4] = ai; if (n < 10) System.out.println(s); if ((n <= 10000 || j == 0) && (n <= 100000)) { a = new DsaTimer("vector2stringPlus"); s = vector2stringPlus(v); ai = a.stop(); if (ai < times[5]) times[5] = ai; if (n < 10) System.out.println(s); } } System.out.print(n); for (int i = 0; i < 6; i++) System.out.print(" " + ((times[i] == Long.MAX_VALUE) ? "-" : times[i]/1000)); // print ratio of previous and this input size for + version /* if (prevtimes[5] > 0) System.out.print(" " + 1.0*times[5]/prevtimes[5]); else System.out.print(" NaN"); prevtimes[5] = times[5]; */ System.out.println(); } String vector2stringPlus(Vector e) { String s = "["; for (int i = 0; i < e.size()-1; i++) s = s + e.get(i) + ", "; if (e.size() > 0) s = s + e.get(e.size()-1); s = s + "]"; return s; } String vector2stringStringBuilder(Vector e) { StringBuilder s = new StringBuilder("["); for (int i = 0; i < e.size()-1; i++) { s.append(e.get(i) + ", "); } if (e.size() > 0) s.append(e.get(e.size()-1)); s.append("]"); return s.toString(); } String vector2stringStringBuilder2(Vector e) { StringBuilder s = new StringBuilder("["); for (int i = 0; i < e.size()-1; i++) { s.append(e.get(i)); s.append(", "); } if (e.size() > 0) s.append(e.get(e.size()-1)); s.append("]"); return s.toString(); } String vector2stringStringBuilder3(Vector e) { StringBuilder s = new StringBuilder(e.size()*(10)); s.append("["); for (int i = 0; i < e.size()-1; i++) { s.append(e.get(i)); s.append(", "); } if (e.size() > 0) s.append(e.get(e.size()-1)); s.append("]"); return s.toString(); } String vector2stringStringBuffer(Vector e) { StringBuffer s = new StringBuffer("["); for (int i = 0; i < e.size()-1; i++) { s.append(e.get(i) + ", "); } if (e.size() > 0) s.append(e.get(e.size()-1)); s.append("]"); return s.toString(); } }