private static Random RANDOM = new Random();
enum Mode {
ASC,
DESC,
RND,
EQ;
}
private static Mode mode = Mode.EQ;
private static int getNext(int i) {
if (mode == Mode.RND) {
return RANDOM.nextInt();
} else if (mode == Mode.ASC) {
return i;
} else if (mode == Mode.DESC) {
return -i;
} else {
return 42;
}
}
public static void main(String[] args) {
Bench treeMapBench = new Bench() {
Map<Integer, Integer> map = null;
@Override
public String getName() {
return "TreeMap-" + mode;
}
@Override
public void reset() {
map = new TreeMap<Integer, Integer>();
}
@Override
public void prepare(long lm) {
}
@Override
public void execute(long lm) {
// put
for (int i = 0; i < lm; i++) {
map.put(getNext(i), getNext(i) * 2);
}
// get
Collection<Integer> list = map.values();
}
};
Bench hashMapBench = new Bench() {
Map<Integer, Integer> map = null;
@Override
public String getName() {
return "HashMap-" + mode;
}
@Override
public void reset() {
map = new HashMap<Integer, Integer>();
}
@Override
public void prepare(long lm) {
}
@Override
public void execute(long lm) {
// put
for (int i = 0; i < lm; i++) {
map.put(getNext(i), getNext(i) * 2);
}
// get
List<Integer> list = new ArrayList<Integer>(map.keySet());
Collections.sort(list);
}
};
Bench hashMapBench2 = new Bench() {
Map<Integer, Integer> map = null;
@Override
public String getName() {
return "HashMap-TreeSet-" + mode;
}
@Override
public void reset() {
map = new HashMap<Integer, Integer>();
}
@Override
public void prepare(long lm) {
}
@Override
public void execute(long lm) {
// put
for (int i = 0; i < lm; i++) {
map.put(getNext(i), getNext(i) * 2);
}
// get
Set<Integer> set = new TreeSet<Integer>(map.keySet());
}
};
mode = Mode.RND; # hier halt einsetzen, was man moechte
QuickBench.benchNxM(10, 50000, new long[] { 1 }, new long[] { 100, 1000, 10000, 100000, 1000000, 10000000 },
new Bench[] { treeMapBench, hashMapBench, hashMapBench2 });
}