Java 中 HashMap 和 TreeMap 性能比较:10000 级不规范字符串测试
首先,我们可以定义一个方法来生成一个指定长度的不规范字符串:
import java.util.Random;
public class RandomStringGenerator {
public static String generate(int length) {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append((char) (random.nextInt(26) + 'a'));
}
return sb.toString();
}
}
接下来,我们可以编写一个测试类来进行比较:
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
int num = 10000;
int operations = num / 10;
String[] keys = new String[num];
for (int i = 0; i < num; i++) {
keys[i] = RandomStringGenerator.generate(10);
}
// HashMap
Map<String, Integer> hashMap = new HashMap<>();
long startTime = System.currentTimeMillis();
for (int i = 0; i < operations; i++) {
hashMap.put(keys[i], i);
}
for (int i = 0; i < operations; i++) {
hashMap.get(keys[i]);
}
for (int i = 0; i < operations; i++) {
hashMap.remove(keys[i]);
}
long endTime = System.currentTimeMillis();
System.out.println('HashMap time: ' + (endTime - startTime) + 'ms');
// TreeMap
Map<String, Integer> treeMap = new TreeMap<>();
startTime = System.currentTimeMillis();
for (int i = 0; i < operations; i++) {
treeMap.put(keys[i], i);
}
for (int i = 0; i < operations; i++) {
treeMap.get(keys[i]);
}
for (int i = 0; i < operations; i++) {
treeMap.remove(keys[i]);
}
endTime = System.currentTimeMillis();
System.out.println('TreeMap time: ' + (endTime - startTime) + 'ms');
}
}
运行上述代码,可以得到 HashMap 和 TreeMap 在不同数量级操作下所耗费的时间。根据比较结果,就可以得出结论。
需要注意的是,由于 HashMap 和 TreeMap 的底层实现不同,它们在插入、查找和删除操作上的性能也不同。因此,对于不同的操作类型和数据规模,它们的表现可能不同。在实际应用中,需要根据具体的需求和数据特点选择合适的数据结构。
原文地址: https://www.cveoy.top/t/topic/o4NY 著作权归作者所有。请勿转载和采集!