在Hashtable get()操作中检查null

时间:2012-07-23 12:23:15

标签: java collections

根据课程Hashtable的java文档:

This example creates a hashtable of numbers. It uses the names of the numbers as keys:

   Hashtable<String, Integer> numbers
     = new Hashtable<String, Integer>();
   numbers.put("one", 1);
   numbers.put("two", 2);
   numbers.put("three", 3);

To retrieve a number, use the following code:

   Integer n = numbers.get("two");
   if (n != null) {
     System.out.println("two = " + n);
   }

当Hashtable不允许键和值中的空值时,为什么在上面代码中的get()操作期间使用if (n != null) {

如果它是为HashMap编写的那么它可以正常,因为HashMap允许键和值中的空值,但为什么它将它用于Hashtable?

4 个答案:

答案 0 :(得分:5)

这是一种很好的做法,因为如果Hashtable中不存在指定的键,get()方法将返回null。 在上面的代码示例中,我们可以省略这一点,因为我们知道"two"键存在,但在现实生活中的应用程序通常不是这样。

答案 1 :(得分:3)

如果地图/表中没有该键,则返回null。

答案 2 :(得分:3)

你可以写

if (number.containsKey("two")) {
    Integer n = numbers.get("two");
    System.out.println("two = " + n);
}

虽然这更清楚,但它有两个问题。

  1. 它较慢,因为它访问地图两次。
  2. 如果在另一个帖子中更新了该集合,则它具有潜在的竞争条件。
  3. 鉴于选择了线程安全的Hashtable,看起来性能不如线程安全那么重要,所以第二个原因更有可能。

答案 3 :(得分:1)

如果指定的键不存在,则返回Null值