Python辞書に相当するJava


93

私は長い間Pythonを使用しており、辞書の使い方がとても好きです。彼らは非常に直感的で使いやすいです。Pythonの辞書に相当する適切なJavaはありますか?ハッシュマップとハッシュテーブルを使っている人のことを聞いたことがあります。誰かがハッシュテーブルとハッシュマップを使用することとPythonの辞書を使用することの類似点と相違点を説明できますか?

回答:


106

Pythonのdictクラスは、Pythonドキュメントが非公式に「マッピングタイプ」と呼ぶものの実装です。内部的にdictは、ハッシュテーブルを使用して実装されています。

JavaのHashMapクラスは、Mapインターフェースの実装です。内部的にHashMapは、ハッシュテーブルを使用して実装されています。

構文にはいくつかの小さな違いがあり、実装は少し異なって調整されていると思いますが、全体としては完全に交換可能です。


40
例は提供されていません:(
Kamran Bigdely

1
@kami:どのような例が必要ですか?
Daniel Pryden 2016

5
動作中のPythonのディクショナリに相当するJavaを示す例。ほとんどの人が例を見てコードで使用するためにここに来るので、役に立つ答えはいくつかの例を含みます。
Kamran Bigdely 2016

13
@神:そうではないと思います。この質問は、「特定のPythonコードに相当するJavaコードは何か」を問うものではありません。実際、質問にはコードがまったく含まれていません。JavaでMap APIを使用する例を追加することの価値がどうなるかわかりません。この回答はすでに正規のドキュメントにリンクしています。Javaを学びたい場合は、Stack Overflowではなくチュートリアルから始めてください。コピー&ペースト可能なコードサンプルがないという理由だけで、この回答が反対投票を正当化するとは思いません。
Daniel Pryden 2016

4
「ほとんどの人が例を見てコードで使用するためにここに来る」というコメントを読んで悲しいですが、これが間違っているといいのですが。
0xc0de

31

辞書とマップの考え方は似ています。どちらにも次のような要素が含まれています

key1:value1, key2:value2 ... and so on

Javaでは、Mapのような様々な方法で実装されHashMap、またはTreeMapその他put(), get()の動作は同様です

import java.util.HashMap;

Map map = new HashMap();
// Put elements to the map
map.put("Ram", new Double(3434.34));
map.put("Krishna", new Double(123.22));
map.put("Hary", new Double(1378.00));
//to get elements
map.get("Krishna"); # =123.22
map.get("Hary"); # = 1378.00 

java8のHashMapのドキュメントを参照してくださいhttps://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html


5

私が知っている限り(私は実際にはJavaを使用していません)、辞書はハッシュマップ/ハッシュテーブルの単なる別名です。

http://www.fluffycat.com/Java/HashMaps/からコードを取得すると、Javaのボイラープレートが少し追加された非常によく似た方法で使用されているようです。


3
Javaには、Hashtableによって実装されるDictionaryインターフェースさえあります。ただし、HashMapが一般的に推奨されます。
マイケルマイヤーズ

1
@Michael Myers:辞書は非推奨です。代わりにMapを使用することをお勧めしますdocs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

2つの違いの1つは、dictどのデータ型がキーとして機能できるかについて、より厳しい要件があることです。Javaは、すべてのオブジェクトがキーとして機能することを許可します。ただし、オブジェクトのhashCode()メソッドがその内部状態を反映する一意の値を返すように注意する必要があります。Pythonでは、オブジェクトのハッシュコードが存続期間中に変更されないように指定するhashableの定義に適合するキーが必要です。


1
これは事実ですが、実際にはどちらの言語でも強制されていません。明らかに、Java hashCode()メソッドまたはPython __hash__()メソッドのいずれかで、内部状態を反映する一意の値を返そうとする必要があります。JavaまたはPythonのいずれかで、可変オブジェクトがある場合、それはおそらくハッシュテーブルキーであってはならないので、hashCode()または__hash__()メソッドから例外をスローすることは理にかなっています。
Daniel Pryden

1
私の経験では、Pythonのほとんどすべてがdictキーになる可能性があります...「より厳しい要件」とは何ですか?
ロンカリアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.