Tôi đã xem qua một thuật toán trên mạng http://www.coderanch.com/t/201836/Performance/java/Hashtable-vs-Hashmap và quyết định thử nghiệm nólà HashMaps với công suất được xác định trước nhanh hơn
public class MapTest{
static int sizeOfTrial = 100000;
static String[] keys = new String[sizeOfTrial];
static String[] vals = new String[sizeOfTrial];
public static void main(String[] args) {
//init sizeOfTrial key/value pairs
for (int i=0; i < sizeOfTrial; i++){
String s1 = "key"+ i;
String s2 = "val"+ i;
keys[i] = s1;
vals[i] = s2;
}
test(new TreeMap(), "TreeMap");
test(new Hashtable(), "Hashtable");
test(new HashMap(), "HashMap");
test(new Hashtable(200000), "Hashtable presized");
test(new HashMap(200000), "HashMap presized");
}
public static void test(Map tm, String name){
long t1 = System.currentTimeMillis();
for (int i=0; i < sizeOfTrial; i++){
tm.put(keys[i],vals[i]);
}
for (int i=0; i < sizeOfTrial; i++){
tm.get(keys[i]);
}
long t2 = System.currentTimeMillis();
System.out.println("total time for " + name + ": " + (t2-t1));
}
}
và tôi đã nhận kết quả như sau
total time for TreeMap: 1744
total time for Hashtable: 446
total time for HashMap: 234
total time for Hashtable presized: 209
total time for HashMap presized: 196
là JVM này phụ thuộc và độc đoán hay nó thực sự cung cấp thời gian truy cập và lưu trữ nhanh hơn?
Điều này chỉ đúng nếu kích thước được xác định trước không được vượt quá. Nếu nó là sau đó một trong những được xác định trước sẽ làm một bản sao là tốt. – twain249
@ twain249: Đúng. Làm rõ với các từ "thường xuyên". – mellamokb
làm thế nào về không chỉ thu hồi mà còn lưu trữ các giá trị mới chống lại một chìa khóa cũ .. nó sẽ nhanh hơn trong hoàn cảnh đó ?? – Nav