分别向HaspMap及Hashtable内输入Person对象,person对象包括:id,name,age. 输入时使用id为key.遍历Hashtable,HashMap,比较他们的速度。
时间: 2024-03-09 08:45:38 浏览: 63
首先,需要说明的是,Hashtable 和 HashMap 都是基于哈希表实现的键值对存储结构,它们的主要区别在于线程安全性和迭代器的遍历方式。Hashtable 是线程安全的,但迭代器只能通过 Enumeration 接口遍历;而 HashMap 不是线程安全的,但迭代器可以通过 Iterator 接口遍历,因此在多线程环境下,推荐使用 ConcurrentHashMap。
接下来,我们可以编写如下代码向 Hashtable 和 HashMap 中添加 Person 对象,并进行遍历:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Hashtable<Integer, Person> hashtable = new Hashtable<>();
HashMap<Integer, Person> hashMap = new HashMap<>();
Random random = new Random();
for (int i = 0; i < 100000; i++) {
int id = i;
String name = "Person" + i;
int age = random.nextInt(100);
Person person = new Person(id, name, age);
hashtable.put(id, person);
hashMap.put(id, person);
}
long start = System.currentTimeMillis();
Enumeration<Integer> keys1 = hashtable.keys();
while (keys1.hasMoreElements()) {
Integer key = keys1.nextElement();
Person person = hashtable.get(key);
// do something with person
}
long end1 = System.currentTimeMillis();
System.out.println("Hashtable traversal time: " + (end1 - start) + "ms");
long start2 = System.currentTimeMillis();
Iterator<Map.Entry<Integer, Person>> iterator = hashMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, Person> entry = iterator.next();
int key = entry.getKey();
Person person = entry.getValue();
// do something with person
}
long end2 = System.currentTimeMillis();
System.out.println("HashMap traversal time: " + (end2 - start2) + "ms");
}
}
class Person {
private int id;
private String name;
private int age;
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
```
上述代码中,我们使用了一个 Random 对象生成了 100000 个 Person 对象,并将它们放入 Hashtable 和 HashMap 中,其中以 id 为键。
接着,我们使用 Enumeration 来遍历 Hashtable,使用 Iterator 来遍历 HashMap,分别统计遍历的时间,并将结果输出。
需要注意的是,由于遍历的时间可能受到多种因素的影响,如 JVM 的性能、计算机的配置等,因此每次运行的结果可能会有所不同。
阅读全文