You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

409 lines
13 KiB

package class37;
import java.util.TreeMap;
import class35.Code01_AVLTreeMap.AVLTreeMap;
import class36.Code01_SizeBalancedTreeMap.SizeBalancedTreeMap;
import class36.Code02_SkipListMap.SkipListMap;
// 本文件为avl、sbt、skiplist三种结构的测试文件
public class Compare {
public static void functionTest() {
System.out.println("功能测试开始");
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
AVLTreeMap<Integer, Integer> avl = new AVLTreeMap<>();
SizeBalancedTreeMap<Integer, Integer> sbt = new SizeBalancedTreeMap<>();
SkipListMap<Integer, Integer> skip = new SkipListMap<>();
int maxK = 500;
int maxV = 50000;
int testTime = 1000000;
for (int i = 0; i < testTime; i++) {
int addK = (int) (Math.random() * maxK);
int addV = (int) (Math.random() * maxV);
treeMap.put(addK, addV);
avl.put(addK, addV);
sbt.put(addK, addV);
skip.put(addK, addV);
int removeK = (int) (Math.random() * maxK);
treeMap.remove(removeK);
avl.remove(removeK);
sbt.remove(removeK);
skip.remove(removeK);
int querryK = (int) (Math.random() * maxK);
if (treeMap.containsKey(querryK) != avl.containsKey(querryK)
|| sbt.containsKey(querryK) != skip.containsKey(querryK)
|| treeMap.containsKey(querryK) != sbt.containsKey(querryK)) {
System.out.println("containsKey Oops");
System.out.println(treeMap.containsKey(querryK));
System.out.println(avl.containsKey(querryK));
System.out.println(sbt.containsKey(querryK));
System.out.println(skip.containsKey(querryK));
break;
}
if (treeMap.containsKey(querryK)) {
int v1 = treeMap.get(querryK);
int v2 = avl.get(querryK);
int v3 = sbt.get(querryK);
int v4 = skip.get(querryK);
if (v1 != v2 || v3 != v4 || v1 != v3) {
System.out.println("get Oops");
System.out.println(treeMap.get(querryK));
System.out.println(avl.get(querryK));
System.out.println(sbt.get(querryK));
System.out.println(skip.get(querryK));
break;
}
Integer f1 = treeMap.floorKey(querryK);
Integer f2 = avl.floorKey(querryK);
Integer f3 = sbt.floorKey(querryK);
Integer f4 = skip.floorKey(querryK);
if (f1 == null && (f2 != null || f3 != null || f4 != null)) {
System.out.println("floorKey Oops");
System.out.println(treeMap.floorKey(querryK));
System.out.println(avl.floorKey(querryK));
System.out.println(sbt.floorKey(querryK));
System.out.println(skip.floorKey(querryK));
break;
}
if (f1 != null && (f2 == null || f3 == null || f4 == null)) {
System.out.println("floorKey Oops");
System.out.println(treeMap.floorKey(querryK));
System.out.println(avl.floorKey(querryK));
System.out.println(sbt.floorKey(querryK));
System.out.println(skip.floorKey(querryK));
break;
}
if (f1 != null) {
int ans1 = f1;
int ans2 = f2;
int ans3 = f3;
int ans4 = f4;
if (ans1 != ans2 || ans3 != ans4 || ans1 != ans3) {
System.out.println("floorKey Oops");
System.out.println(treeMap.floorKey(querryK));
System.out.println(avl.floorKey(querryK));
System.out.println(sbt.floorKey(querryK));
System.out.println(skip.floorKey(querryK));
break;
}
}
f1 = treeMap.ceilingKey(querryK);
f2 = avl.ceilingKey(querryK);
f3 = sbt.ceilingKey(querryK);
f4 = skip.ceilingKey(querryK);
if (f1 == null && (f2 != null || f3 != null || f4 != null)) {
System.out.println("ceilingKey Oops");
System.out.println(treeMap.ceilingKey(querryK));
System.out.println(avl.ceilingKey(querryK));
System.out.println(sbt.ceilingKey(querryK));
System.out.println(skip.ceilingKey(querryK));
break;
}
if (f1 != null && (f2 == null || f3 == null || f4 == null)) {
System.out.println("ceilingKey Oops");
System.out.println(treeMap.ceilingKey(querryK));
System.out.println(avl.ceilingKey(querryK));
System.out.println(sbt.ceilingKey(querryK));
System.out.println(skip.ceilingKey(querryK));
break;
}
if (f1 != null) {
int ans1 = f1;
int ans2 = f2;
int ans3 = f3;
int ans4 = f4;
if (ans1 != ans2 || ans3 != ans4 || ans1 != ans3) {
System.out.println("ceilingKey Oops");
System.out.println(treeMap.ceilingKey(querryK));
System.out.println(avl.ceilingKey(querryK));
System.out.println(sbt.ceilingKey(querryK));
System.out.println(skip.ceilingKey(querryK));
break;
}
}
}
Integer f1 = treeMap.firstKey();
Integer f2 = avl.firstKey();
Integer f3 = sbt.firstKey();
Integer f4 = skip.firstKey();
if (f1 == null && (f2 != null || f3 != null || f4 != null)) {
System.out.println("firstKey Oops");
System.out.println(treeMap.firstKey());
System.out.println(avl.firstKey());
System.out.println(sbt.firstKey());
System.out.println(skip.firstKey());
break;
}
if (f1 != null && (f2 == null || f3 == null || f4 == null)) {
System.out.println("firstKey Oops");
System.out.println(treeMap.firstKey());
System.out.println(avl.firstKey());
System.out.println(sbt.firstKey());
System.out.println(skip.firstKey());
break;
}
if (f1 != null) {
int ans1 = f1;
int ans2 = f2;
int ans3 = f3;
int ans4 = f4;
if (ans1 != ans2 || ans3 != ans4 || ans1 != ans3) {
System.out.println("firstKey Oops");
System.out.println(treeMap.firstKey());
System.out.println(avl.firstKey());
System.out.println(sbt.firstKey());
System.out.println(skip.firstKey());
break;
}
}
f1 = treeMap.lastKey();
f2 = avl.lastKey();
f3 = sbt.lastKey();
f4 = skip.lastKey();
if (f1 == null && (f2 != null || f3 != null || f4 != null)) {
System.out.println("lastKey Oops");
System.out.println(treeMap.lastKey());
System.out.println(avl.lastKey());
System.out.println(sbt.lastKey());
System.out.println(skip.lastKey());
break;
}
if (f1 != null && (f2 == null || f3 == null || f4 == null)) {
System.out.println("firstKey Oops");
System.out.println(treeMap.lastKey());
System.out.println(avl.lastKey());
System.out.println(sbt.lastKey());
System.out.println(skip.lastKey());
break;
}
if (f1 != null) {
int ans1 = f1;
int ans2 = f2;
int ans3 = f3;
int ans4 = f4;
if (ans1 != ans2 || ans3 != ans4 || ans1 != ans3) {
System.out.println("lastKey Oops");
System.out.println(treeMap.lastKey());
System.out.println(avl.lastKey());
System.out.println(sbt.lastKey());
System.out.println(skip.lastKey());
break;
}
}
if (treeMap.size() != avl.size() || sbt.size() != skip.size() || treeMap.size() != sbt.size()) {
System.out.println("size Oops");
System.out.println(treeMap.size());
System.out.println(avl.size());
System.out.println(sbt.size());
System.out.println(skip.size());
break;
}
}
System.out.println("功能测试结束");
}
public static void performanceTest() {
System.out.println("性能测试开始");
TreeMap<Integer, Integer> treeMap;
AVLTreeMap<Integer, Integer> avl;
SizeBalancedTreeMap<Integer, Integer> sbt;
SkipListMap<Integer, Integer> skip;
long start;
long end;
int max = 1000000;
treeMap = new TreeMap<>();
avl = new AVLTreeMap<>();
sbt = new SizeBalancedTreeMap<>();
skip = new SkipListMap<>();
System.out.println("顺序递增加入测试,数据规模 : " + max);
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
treeMap.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("treeMap 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
avl.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("avl 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
sbt.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("sbt 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
skip.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("skip 运行时间 : " + (end - start) + "ms");
System.out.println("顺序递增删除测试,数据规模 : " + max);
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
treeMap.remove(i);
}
end = System.currentTimeMillis();
System.out.println("treeMap 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
avl.remove(i);
}
end = System.currentTimeMillis();
System.out.println("avl 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
sbt.remove(i);
}
end = System.currentTimeMillis();
System.out.println("sbt 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
skip.remove(i);
}
end = System.currentTimeMillis();
System.out.println("skip 运行时间 : " + (end - start) + "ms");
System.out.println("顺序递减加入测试,数据规模 : " + max);
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
treeMap.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("treeMap 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
avl.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("avl 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
sbt.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("sbt 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
skip.put(i, i);
}
end = System.currentTimeMillis();
System.out.println("skip 运行时间 : " + (end - start) + "ms");
System.out.println("顺序递减删除测试,数据规模 : " + max);
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
treeMap.remove(i);
}
end = System.currentTimeMillis();
System.out.println("treeMap 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
avl.remove(i);
}
end = System.currentTimeMillis();
System.out.println("avl 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
sbt.remove(i);
}
end = System.currentTimeMillis();
System.out.println("sbt 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
skip.remove(i);
}
end = System.currentTimeMillis();
System.out.println("skip 运行时间 : " + (end - start) + "ms");
System.out.println("随机加入测试,数据规模 : " + max);
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
treeMap.put((int) (Math.random() * i), i);
}
end = System.currentTimeMillis();
System.out.println("treeMap 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
avl.put((int) (Math.random() * i), i);
}
end = System.currentTimeMillis();
System.out.println("avl 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
sbt.put((int) (Math.random() * i), i);
}
end = System.currentTimeMillis();
System.out.println("sbt 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
skip.put((int) (Math.random() * i), i);
}
end = System.currentTimeMillis();
System.out.println("skip 运行时间 : " + (end - start) + "ms");
System.out.println("随机删除测试,数据规模 : " + max);
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
treeMap.remove((int) (Math.random() * i));
}
end = System.currentTimeMillis();
System.out.println("treeMap 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
avl.remove((int) (Math.random() * i));
}
end = System.currentTimeMillis();
System.out.println("avl 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
sbt.remove((int) (Math.random() * i));
}
end = System.currentTimeMillis();
System.out.println("sbt 运行时间 : " + (end - start) + "ms");
start = System.currentTimeMillis();
for (int i = max; i >= 0; i--) {
skip.remove((int) (Math.random() * i));
}
end = System.currentTimeMillis();
System.out.println("skip 运行时间 : " + (end - start) + "ms");
System.out.println("性能测试结束");
}
public static void main(String[] args) {
functionTest();
System.out.println("======");
performanceTest();
}
}