import java.util.Random;
import java.util.Arrays;
public class Main {
private static String[] ourStrings
= { "1.one", "2.two", "3.three"
};
private static int[] doItWithEquals
(String[] entries
) { int[] results = new int[entries.length];
for (int i = 0; i < entries.length; ++i) {
results[i] = -1;
for (int j = 0; j < ourStrings.length; ++j) {
if (ourStrings[j].equals(entries[i])) {
results[i] = j;
break;
}
}
}
return results;
}
private static int[] doItWithBinarySearch
(String[] entries
) { int[] results = new int[entries.length];
for (int i = 0; i < entries.length; ++i) {
results
[i
] = Arrays.
binarySearch(ourStrings, entries
[i
]); }
return results;
}
private static int[] doItWithReferences
(String[] entries
) { int[] results = new int[entries.length];
for (int i = 0; i < entries.length; ++i) {
results[i] = -1;
for (int j = 0; j < ourStrings.length; ++j) {
if (ourStrings[j] == entries[i]) {
results[i] = j;
break;
}
}
}
return results;
}
private static String[] generateList
(int size
) { for (int i = 0; i < size; ++i) {
result[i] = ourStrings[rng.nextInt(ourStrings.length)];
}
return result;
}
public static void main
(String[] s
) { long totalForReferences = 0;
long totalForEquals = 0;
long totalForSearch = 0;
int iterationCount = 1000;
for (int i = 0; i < iterationCount; ++i) {
String[] testData
= generateList
(10000);
long start
= System.
nanoTime(); int[] resultsWithReferences = doItWithReferences(testData);
totalForReferences
+= System.
nanoTime() - start
;
int[] resultsWithEquals = doItWithEquals(testData);
totalForEquals
+= System.
nanoTime() - start
;
int[] resultsWithBinarySearch = doItWithBinarySearch(testData);
totalForSearch
+= System.
nanoTime() - start
;
if (
!Arrays.
equals(resultsWithReferences, resultsWithEquals
) || !Arrays.
equals(resultsWithReferences, resultsWithBinarySearch
) ) {
throw new AssertionError("Results don't match");
}
}
long referencesTime = totalForReferences / iterationCount;
long equalsTime = totalForEquals / iterationCount;
long searchTime = totalForSearch / iterationCount;
"References: %d ns\nEquals: %d ns\nBinary search: %d ns\n",
referencesTime, equalsTime, searchTime
);
}
}
aW1wb3J0IGphdmEudXRpbC5SYW5kb207CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwoKcHVibGljIGNsYXNzIE1haW4gewoJcHJpdmF0ZSBzdGF0aWMgUmFuZG9tIHJuZyA9IG5ldyBSYW5kb20oKTsKCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIG91clN0cmluZ3MgPSB7CgkJIjEub25lIiwgIjIudHdvIiwgIjMudGhyZWUiCgl9OwoKCXByaXZhdGUgc3RhdGljIGludFtdIGRvSXRXaXRoRXF1YWxzKFN0cmluZ1tdIGVudHJpZXMpIHsKCQlpbnRbXSByZXN1bHRzID0gbmV3IGludFtlbnRyaWVzLmxlbmd0aF07CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CgkJCXJlc3VsdHNbaV0gPSAtMTsKCQkJZm9yIChpbnQgaiA9IDA7IGogPCBvdXJTdHJpbmdzLmxlbmd0aDsgKytqKSB7CgkJCQlpZiAob3VyU3RyaW5nc1tqXS5lcXVhbHMoZW50cmllc1tpXSkpIHsKCQkJCQlyZXN1bHRzW2ldID0gajsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gcmVzdWx0czsKCX0KCglwcml2YXRlIHN0YXRpYyBpbnRbXSBkb0l0V2l0aEJpbmFyeVNlYXJjaChTdHJpbmdbXSBlbnRyaWVzKSB7CgkJaW50W10gcmVzdWx0cyA9IG5ldyBpbnRbZW50cmllcy5sZW5ndGhdOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7ICsraSkgewoJCQlyZXN1bHRzW2ldID0gQXJyYXlzLmJpbmFyeVNlYXJjaChvdXJTdHJpbmdzLCBlbnRyaWVzW2ldKTsKCQl9CgkJcmV0dXJuIHJlc3VsdHM7Cgl9CgoJcHJpdmF0ZSBzdGF0aWMgaW50W10gZG9JdFdpdGhSZWZlcmVuY2VzKFN0cmluZ1tdIGVudHJpZXMpIHsKCQlpbnRbXSByZXN1bHRzID0gbmV3IGludFtlbnRyaWVzLmxlbmd0aF07CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CgkJCXJlc3VsdHNbaV0gPSAtMTsKCQkJZm9yIChpbnQgaiA9IDA7IGogPCBvdXJTdHJpbmdzLmxlbmd0aDsgKytqKSB7CgkJCQlpZiAob3VyU3RyaW5nc1tqXSA9PSBlbnRyaWVzW2ldKSB7CgkJCQkJcmVzdWx0c1tpXSA9IGo7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIHJlc3VsdHM7Cgl9CgoJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2VuZXJhdGVMaXN0KGludCBzaXplKSB7CgkJU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1tzaXplXTsKCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewoJCQlyZXN1bHRbaV0gPSBvdXJTdHJpbmdzW3JuZy5uZXh0SW50KG91clN0cmluZ3MubGVuZ3RoKV07CgkJfQoJCXJldHVybiByZXN1bHQ7Cgl9CgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gcykgewoJCWxvbmcgdG90YWxGb3JSZWZlcmVuY2VzID0gMDsKCQlsb25nIHRvdGFsRm9yRXF1YWxzID0gMDsKCQlsb25nIHRvdGFsRm9yU2VhcmNoID0gMDsKCQlpbnQgaXRlcmF0aW9uQ291bnQgPSAxMDAwOwoKCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50OyArK2kpIHsKCQkJU3RyaW5nW10gdGVzdERhdGEgPSBnZW5lcmF0ZUxpc3QoMTAwMDApOwoJCQkKCQkJbG9uZyBzdGFydCA9IFN5c3RlbS5uYW5vVGltZSgpOwoJCQlpbnRbXSByZXN1bHRzV2l0aFJlZmVyZW5jZXMgPSBkb0l0V2l0aFJlZmVyZW5jZXModGVzdERhdGEpOwoJCQl0b3RhbEZvclJlZmVyZW5jZXMgKz0gU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydDsKCgkJCXN0YXJ0ID0gU3lzdGVtLm5hbm9UaW1lKCk7CgkJCWludFtdIHJlc3VsdHNXaXRoRXF1YWxzID0gZG9JdFdpdGhFcXVhbHModGVzdERhdGEpOwoJCQl0b3RhbEZvckVxdWFscyArPSBTeXN0ZW0ubmFub1RpbWUoKSAtIHN0YXJ0OwoKCQkJc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKCQkJaW50W10gcmVzdWx0c1dpdGhCaW5hcnlTZWFyY2ggPSBkb0l0V2l0aEJpbmFyeVNlYXJjaCh0ZXN0RGF0YSk7CgkJCXRvdGFsRm9yU2VhcmNoICs9IFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnQ7CgoJCQlpZiAoCgkJCQkhQXJyYXlzLmVxdWFscyhyZXN1bHRzV2l0aFJlZmVyZW5jZXMsIHJlc3VsdHNXaXRoRXF1YWxzKSB8fAoJCQkJIUFycmF5cy5lcXVhbHMocmVzdWx0c1dpdGhSZWZlcmVuY2VzLCByZXN1bHRzV2l0aEJpbmFyeVNlYXJjaCkKCQkJKSB7CgkJCQl0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlJlc3VsdHMgZG9uJ3QgbWF0Y2giKTsKCQkJfQoJCX0KCQlsb25nIHJlZmVyZW5jZXNUaW1lID0gdG90YWxGb3JSZWZlcmVuY2VzIC8gaXRlcmF0aW9uQ291bnQ7CgkJbG9uZyBlcXVhbHNUaW1lID0gdG90YWxGb3JFcXVhbHMgLyBpdGVyYXRpb25Db3VudDsKCQlsb25nIHNlYXJjaFRpbWUgPSB0b3RhbEZvclNlYXJjaCAvIGl0ZXJhdGlvbkNvdW50OwoKCQlTeXN0ZW0ub3V0LnByaW50ZigKCQkJIlJlZmVyZW5jZXM6ICVkIG5zXG5FcXVhbHM6ICVkIG5zXG5CaW5hcnkgc2VhcmNoOiAlZCBuc1xuIiwKCQkJcmVmZXJlbmNlc1RpbWUsIGVxdWFsc1RpbWUsIHNlYXJjaFRpbWUKCQkpOwoJfQp9