BAEL-1374 - reuse array

This commit is contained in:
ericgoebelbecker 2017-12-15 18:58:37 -05:00
parent 6809155a91
commit e20d477733

View File

@ -10,47 +10,40 @@ import java.util.concurrent.TimeUnit;
@OutputTimeUnit(TimeUnit.MICROSECONDS) @OutputTimeUnit(TimeUnit.MICROSECONDS)
public class SearchArrayTest { public class SearchArrayTest {
@State(Scope.Benchmark)
public static class SearchData {
static int count = 1000;
static String[] strings = seedArray(1000);
}
@Benchmark @Benchmark
public void searchArrayLoop() { public void searchArrayLoop() {
for (int i = 0; i < SearchData.count; i++) {
int count = 1000; searchLoop(SearchData.strings, "T");
String[] strings = seedArray(count);
for (int i = 0; i < count; i++) {
searchLoop(strings, "T");
} }
} }
@Benchmark @Benchmark
public void searchArrayAllocNewList() { public void searchArrayAllocNewList() {
for (int i = 0; i < SearchData.count; i++) {
int count = 1000; searchList(SearchData.strings, "T");
String[] strings = seedArray(count);
for (int i = 0; i < count; i++) {
searchList(strings, "T");
} }
} }
@Benchmark @Benchmark
public void searchArrayAllocNewSet() { public void searchArrayAllocNewSet() {
for (int i = 0; i < SearchData.count; i++) {
int count = 1000; searchSet(SearchData.strings, "T");
String[] strings = seedArray(count);
for (int i = 0; i < count; i++) {
searchSet(strings, "T");
} }
} }
@Benchmark @Benchmark
public void searchArrayReuseList() { public void searchArrayReuseList() {
List<String> asList = Arrays.asList(SearchData.strings);
int count = 1000; for (int i = 0; i < SearchData.count; i++) {
String[] strings = seedArray(count);
List<String> asList = Arrays.asList(strings);
for (int i = 0; i < count; i++) {
asList.contains("T"); asList.contains("T");
} }
} }
@ -58,11 +51,8 @@ public class SearchArrayTest {
@Benchmark @Benchmark
public void searchArrayReuseSet() { public void searchArrayReuseSet() {
Set<String> asSet = new HashSet<>(Arrays.asList(SearchData.strings));
int count = 1000; for (int i = 0; i < SearchData.count; i++) {
String[] strings = seedArray(count);
Set<String> asSet = new HashSet<>(Arrays.asList(strings));
for (int i = 0; i < count; i++) {
asSet.contains("T"); asSet.contains("T");
} }
} }
@ -70,18 +60,10 @@ public class SearchArrayTest {
@Benchmark @Benchmark
public void searchArrayBinarySearch() { public void searchArrayBinarySearch() {
Arrays.sort(SearchData.strings);
int count = 1000; for (int i = 0; i < SearchData.count; i++) {
String[] strings = seedArray(count); Arrays.binarySearch(SearchData.strings, "T");
Arrays.sort(strings);
long startTime = System.nanoTime();
for (int i = 0; i < count; i++) {
Arrays.binarySearch(strings, "T");
} }
long duration = System.nanoTime() - startTime;
//System.out.println("Binary search: " + duration / 10000);
} }
private boolean searchList(String[] strings, String searchString) { private boolean searchList(String[] strings, String searchString) {
@ -101,8 +83,7 @@ public class SearchArrayTest {
return false; return false;
} }
private String[] seedArray(int length) { private static String[] seedArray(int length) {
String[] strings = new String[length]; String[] strings = new String[length];
Random random = new Random(); Random random = new Random();
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)