1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| package exercices;
import java.util.Hashtable;
public class FizzBuzz {
// time for cum with nbIter=30 > 300; 30 ~= 3000
static final int nbIter = 30;
static final String sep = "_";
static long ifNested() {
final StringBuilder sb = new StringBuilder();
final long t = System.nanoTime();
for (int i = 0; i < nbIter; i++) {
sb.append(//
i % 15 == 0 //
? "FizzBuzz" //
: (i % 3 == 0 //
? "Fizz"//
: (i % 5 == 0//
? "Buzz" //
: i)));// sb.append(sep);
}
final long totT = System.nanoTime() - t;
System.out.format("ifNested\t%20d\n", totT);
// sb.append("\n"); System.out.println(sb.toString());
return totT;
}
static long stringPlus() {
final StringBuilder sb = new StringBuilder();
final long t = System.nanoTime();
for (int i = 0; i < nbIter; i++) {
String x = "";
x += (i % 3 == 0) ? "Fizz" : "";
x += (i % 5 == 0) ? "Buzz" : "";
if (x.isEmpty()) { // MODIF
x += Integer.toString(i);
}
sb.append(x);// sb.append(sep);
}
final long totT = System.nanoTime() - t;
System.out.format("stringPlus\t%20d\n", totT);
// sb.append("\n"); System.out.println(sb.toString());
return totT;
}
static long withIf() {
final StringBuilder sb = new StringBuilder();
final long t = System.nanoTime();
for (int i = 0; i < nbIter; i++) {
if (i % 3 == 0) {
sb.append("Fizz");
if (i % 5 == 0) {
sb.append("Buzz");
}
} else
if (i % 5 == 0) {
sb.append("Buzz");
} else {
sb.append(i);
}// sb.append(sep);
}
final long totT = System.nanoTime() - t;
System.out.format("withIf\t\t%20d\n", totT);
// sb.append("\n");System.out.println(sb.toString());
return totT;
}
static long withArray() {
final String[] lis = {"FizzBuzz", "", "", "Fizz", "", "Buzz", "Fizz",
"", "", "Fizz", "Buzz", "", "Fizz", "", "",};
final StringBuilder sb = new StringBuilder();
final long t = System.nanoTime();
for (int i = 0; i < nbIter; i++) {
final String pos = lis[i % 15];
sb.append(((0 == pos.length()) ? i : pos));// sb.append(sep);
}
final long totT = System.nanoTime() - t;
System.out.format("withArray\t%20d\n", totT);
// sb.append("\n"); System.out.println(sb.toString());
return totT;
}
static long withTable() {
final Hashtable<Integer, String> ht = new Hashtable<Integer, String>(8);
ht.put(0, "FizzBuzz");
ht.put(3, "Fizz");
ht.put(5, "Buzz");
ht.put(6, "Fizz");
ht.put(9, "Fizz");
ht.put(10, "Buzz");
ht.put(12, "Buzz");
final StringBuilder sb = new StringBuilder();
final long t = System.nanoTime();
for (int i = 0; i < nbIter; i++) {
final String s = ht.get(i % 15);
// MODIF
// http://www.developpez.net/forums/d1196563-2/java/general-java/if-null-object-if-objet-null/#post6561766
// sb.append((null == s ? i : s));// sb.append(sep);
if (null == s) {
sb.append(i);
} else {
sb.append(s);
}
}
final long totT = System.nanoTime() - t;
System.out.format("withTable\t%20d\n", totT);
// sb.append("\n"); System.out.println(sb.toString());
return totT;
}
static int recursive(final StringBuilder sb, final int n) {
if (0 == n) {
return 1;
}
if (n % 3 == 0) {
sb.insert(0, "Fizz");
if (n % 5 == 0) {
sb.insert(0, "Buzz");
}
} else
if (n % 5 == 0) {
sb.insert(0, "Buzz");
} else {
sb.insert(0, n);
}
return n + recursive(sb, n - 1);
}
static long recursive() {
final StringBuilder sb = new StringBuilder("");
final long t = System.nanoTime();
recursive(sb, nbIter);
final long totT = System.nanoTime() - t;
System.out.format("recursive\t%20d\n", totT);
sb.append("\n");
System.out.println(sb.toString());
return totT;
}
/*** @param args */
public static void main(final String[] args) {
long cum = 0L, cum2 = 0L;
for (int i = 0; i < 5; i++) {
System.out.println("------ " + i + " -----");
final long totSb = stringPlus();
final long totIn = ifNested();
final long totWi = withIf();
final long totWa = withArray();
final long totWt = withTable();
final long totRe = recursive();
System.out.format("... stringPlus/withIf :%5d\n", (totSb * 100)
/ totWi);
System.out.format("... ifNested/withIf :%5d\n", (totIn * 100)
/ totWi);
System.out.format("... withArray/withIf :%5d\n", (totWa * 100)
/ totWi);
System.out.format("... withTable/withIf :%5d\n", (totWt * 100)
/ totWi);
System.out.format("... recursive/withIf :%5d\n", (totRe * 100)
/ totWi);
cum += totIn + totSb + totWi + totWa + totWt + totRe;
System.out.println("CUMUL (SECOND) == " + cum / 100000000 + "."
+ cum % 100000000 + "\t , diff: " + (cum - cum2));
cum2 = cum;
}
}
} |