// StringTest.java SJ // Verrataan eri tapoja tehdä Vector:sta merkkijono 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 StringTest { public static void main(String[] args) { int N = 40, M = 1; Ajastin a = new Ajastin("Yhteensä"); StringTest l = new StringTest(); // Ensimmäinen parametri: max vektorin pituus if (args.length > 0) N = Integer.valueOf(args[0]); // toinen parametri: toistomäärä kullakin vektorin pituudella if (args.length > 1) M = Integer.valueOf(args[1]); // toistetaan aina tuplaamalla vektorin pituus for (int i = 16; i < N; i*=2) { l.testaaToistaen(i, M); } // System.out.println(a); } // main() // testaa kunkin eri tavan m kertaa void testaaToistaen(int n, int m) { // n mittainen syötevektori Vector v = new Vector(n); for (int i = 0; i < n; i++) v.add(i); // aikataulukko eri tavoille long[] ajat = new long[6]; for (int i = 0; i < 6; i++) ajat[i] = 99999999; Ajastin a; String s; long ai; for (int j = 0; j < m; j++) { // Vectorin oman toString() a = new Ajastin("Vector.toString"); s = v.toString(); ai = a.stop(); if (ai < ajat[0]) // otetaan minimi ajoista ajat[0] = ai; if (n < 10) // tulostetaan jos syöte pieni System.out.println(s); // yksinkertainen StringBuffer versio a = new Ajastin("vector2stringStringBuffer"); s = vector2stringStringBuffer(v); ai = a.stop(); if (ai < ajat[1]) ajat[1] = ai; if (n < 10) System.out.println(s); // yksinkertainen StringBuilder versio a = new Ajastin("vector2stringStringBuilder"); s = vector2stringStringBuilder(v); ai = a.stop(); if (ai < ajat[2]) ajat[2] = ai; if (n < 10) System.out.println(s); // StringBuilder kahta append():ä käyttäen a = new Ajastin("vector2stringStringBuilder2"); s = vector2stringStringBuilder2(v); ai = a.stop(); if (ai < ajat[3]) ajat[3] = ai; if (n < 10) System.out.println(s); // StringBuilder varaten koko tila valmiiksi a = new Ajastin("vector2stringStringBuilder3"); s = vector2stringStringBuilder3(v); ai = a.stop(); if (ai < ajat[4]) ajat[4] = ai; if (n < 10) System.out.println(s); // String -operaatioita käyttäen // ei kutsuta jos syöte iso // keskikokoisella syötteellä suoritetaan vain kerran if (n < 10000 && j == 0 || n < 1200) { a = new Ajastin("vector2string"); s = vector2string(v); ai = a.stop(); if (ai < ajat[5]) ajat[5] = ai; // System.out.println(a); if (n < 10) System.out.println(s); } } // tulostetaan parhaat ajat System.out.print(n); for (int i = 0; i < 6; i++) System.out.print(" " + ajat[i]); System.out.println(); } // eri toteutukset String vector2string(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()*(12)); 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(); } }