2

クラスのJavaドキュメントによるとHashtable

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);
   }

if (n != null) {Hashtable がキーと値に null を許可していないのに、上記のコードで get() 操作中に使用しているのはなぜ ですか?

HashMap 用に作成されていれば、HashMap はキーと値に null を許可するので問題ありませんが、なぜそれを Hashtable に使用するのでしょうか?

4

4 に答える 4

5

指定されたキーがハッシュテーブルに存在しない場合、get()メソッドが戻るので、これはちょうど良い習慣です。 上記のコード例では、キーが存在することがわかっているため、これを省略できますが、実際のアプリケーションではそうではないことがよくあります。null
"two"

于 2012-07-23T12:25:38.690 に答える
3

あなたは書くことができます

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

これはより明確ですが、2つの問題があります。

  1. マップに2回アクセスするため、速度が低下します。
  2. コレクションが別のスレッドで更新された場合、競合状態が発生する可能性があります。

スレッドセーフなハッシュテーブルが選択されていることを考えると、パフォーマンスはスレッドセーフよりも重要ではないように思われるため、2番目の理由が考えられます。

于 2012-07-23T12:42:34.173 に答える
3

キーがマップ/テーブルに存在しない場合、getはnullを返します。

于 2012-07-23T12:26:16.903 に答える
1

指定されたキーが存在しない場合、getは値としてNullを返します

于 2012-07-23T12:32:21.287 に答える