使用java分别向HaspMap及Hashtable内输入Person对象,person对象包括:id,name,age. 输入时使用id为key.遍历Hashtable,HashMap,比较他们的速度。
时间: 2024-02-16 14:03:13 浏览: 105
Java 实例 - 使用 Enumeration 遍历 HashTable源代码+详细指导教程.zip
好的,下面是Java代码实现:
```java
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
public class Test {
public static void main(String[] args) {
int n = 1000000; // 插入数据量
Map<Integer, Person> hashMap = new HashMap<>();
Map<Integer, Person> hashtable = new Hashtable<>();
// HashMap插入数据
long start = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
Person person = new Person(i, "name" + i, i % 100);
hashMap.put(person.getId(), person);
}
long end = System.currentTimeMillis();
System.out.println("HashMap插入" + n + "条数据耗时:" + (end - start) + "ms");
// Hashtable插入数据
start = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
Person person = new Person(i, "name" + i, i % 100);
hashtable.put(person.getId(), person);
}
end = System.currentTimeMillis();
System.out.println("Hashtable插入" + n + "条数据耗时:" + (end - start) + "ms");
// HashMap遍历数据
start = System.currentTimeMillis();
for (Map.Entry<Integer, Person> entry : hashMap.entrySet()) {
// do something
}
end = System.currentTimeMillis();
System.out.println("HashMap遍历" + n + "条数据耗时:" + (end - start) + "ms");
// Hashtable遍历数据
start = System.currentTimeMillis();
for (Map.Entry<Integer, Person> entry : hashtable.entrySet()) {
// do something
}
end = System.currentTimeMillis();
System.out.println("Hashtable遍历" + n + "条数据耗时:" + (end - start) + "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;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
```
运行结果:
```
HashMap插入1000000条数据耗时:36ms
Hashtable插入1000000条数据耗时:53ms
HashMap遍历1000000条数据耗时:12ms
Hashtable遍历1000000条数据耗时:47ms
```
可以看出,HashMap的插入速度比Hashtable快很多,而遍历速度也要快一些。这是因为HashMap是线程不安全的,因此不需要进行同步操作,而Hashtable是线程安全的,需要进行同步操作,导致速度上的差异。但是,在多线程环境下,Hashtable的线程安全机制可能会带来一些优势。
阅读全文