Java进阶-HashMap 和 Hashtable 的区别

  • HashMap 集合的 key 和 value 都是可以为 null 的,但是要注意:HashMap 集合的 key null 值只能有一个
  • Hashtable 集合的 key 和 value 都是不可以为 null 的,Hashtable 方法都带有 synchronized :线程安全的。线程安全有其他的方案,这个 Hashtable 对线程的处理导致效率较低,使用较少了
  • Hashtable 和 HashMap 一样,底层都是哈希表数据结构
  • Hashtable 的初始化容量是 11默认加载因子是:0.75f
  • Hashtable 的*扩容是:原容量 * 2 + 1*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

public class HashtableTest01 {

public static void main(String[] args) {
Map map = new HashMap();

// HashMap 集合允许 key 为 null
map.put(null, null);
System.out.println(map.size()); // 1

// key 重复的话 value 会覆盖
map.put(null, 10);
System.out.println(map.size()); // 1

// 通过 key 获取 value
System.out.println(map.get(null)); // 10

// Hashtable 的 key、value 都不能为 null
Map map1 = new Hashtable();

map1.put(null, 10); // 报错: java.lang.NullPointerException
// map1.put(10, null); // 报错: java.lang.NullPointerException
}
}