-2

私はJavaが初めてで、ハッシュマップの次の使用法に出くわしました:

public static HashMap< String, Integer > Table1;
....
Table1 = new HashMap< String, Integer > ();

.....
public Map<String, Integer> Table2 = new HashMap<String, Integer>();

私の質問は、上記のステートメントは同等ですか? はMap<String, Integer>Table2に使用されているようです。HashMap< String, Integer > Table1Map<String, Integer> Table2同じプログラミング構造ですか? それらは同じ意味で使用できますか?

4

4 に答える 4

3

Mapはインターフェースであり、HashMapのようないくつかの実装で実装されます。

HashMapは完全な実装クラスです。

有用な答えはここにあります-JavaのHashMapとMapの違い..?

于 2013-03-13T03:38:37.720 に答える
2

MapはインターフェースでありHashMap、その実装です。これらは一方向にのみ交換可能です。つまり、 a を使用できる場所であればMapHashMap代わりに a を使用できます。ただし、ハッシュベースのマップ ( )、ソート マップ ( )、スレッド セーフ マップ ( )、または不変Mapのマップのいずれであっても、あらゆる種類の「マップ」が提供する必要があるすべての操作を表現するため、それをはるかに超えています。マップ ( Guava から)。これらのさまざまな種類のマップなどは、 aが必要な場所で使用できます。それ自体は実際の作業コードを提供しません。あらゆる種類のマップで何ができる必要があるかを示しているだけです。HashMapTreeMapConcurrentMapImmutableMapMapMap

この関係の詳細については、Java チュートリアルの「インターフェースとは」を参照してください。「オブジェクト指向プログラミングの概念」トレイルのセクションと「インターフェイスと継承」トレイルにあります。

于 2013-03-13T03:37:48.213 に答える
1

定義されているように、Table1は常にHashMapである必要がありますが、Table2は他のマップでもかまいません。

public Map<String, Integer> Table2 = new HashMap<String, Integer>();
Table2 = new TreeMap<String, Integer>();
Table2 = someFunctionThatReturnsMaps();

Table1のHashMapにキャストする必要があるMapタイプを返すさまざまなライブラリがあるため、最後のライブラリがおそらく最も重要です。

追記:一般的な規則では、変数名は小文字で開始します(table1、table2など)。

于 2013-03-13T03:38:32.120 に答える
1

Mapはインターフェースであり、HashMapはMapインターフェースから実装されたクラスです。

インターフェイス変数はサブクラス参照を保持できます。互換的に使用することはできません。

于 2013-03-13T03:34:21.903 に答える