Java HashMap対JSONObjectのパフォーマンスについて疑問に思っています。
JSONObjectはHashMapを使用して内部的にデータを格納しているようです。ただし、JSONObjectはHashMapと比較して追加のオーバーヘッドがある場合があります。
HashMapと比較したJava JSONObjectのパフォーマンスについて誰か知っていますか?
ありがとう!
あなたが言ったように、JSONObject
はHashMap
に支えられています。
このため、パフォーマンスはほぼ同じになります。 JSONObject.get()
はnullチェックを追加し、キーが見つからない場合は例外をスローします。 JSONObject.put()
はmap.put()
を呼び出すだけです。
したがって、オーバーヘッドはほとんどありません。 JSONオブジェクトを処理する場合は、alwaysJSONObject
よりもHashMap
を使用する必要があります。
質問はいくつかの理由で意味をなさないと思います:
既存の答えは正しいですが、2つのパフォーマンスの違いはごくわずかです。
どちらも基本的に、データを保存および操作するためのかなり非効率的な方法です。より効率的な方法は通常、通常のJavaオブジェクトにバインドすることです。これにより、メモリ使用量が少なく、アクセスが高速になります。多くの開発者は、よく知られているorg.jsonのシンプルな(プリミティブ)ライブラリを使用します。 JacksonやGsonなどの選択肢は大幅に改善されているため、それらの使用を検討する価値があります。
JSONObjectには、HashMapに加えて追加のオーバーヘッドがあまりありません。 HashMapの使用に問題がない場合は、JSONObjectを使用しても問題ありません。これは、JSONを生成したい場合に提供されます。
JSONObjectは、JSONObjectの一部として格納している値の有効性をチェックし、JSON仕様に準拠していることを確認します。たとえばNaN値は、有効なJSONの一部を形成しません。これとは別に、JSONObjectはjson文字列を生成できます(通常の|事前定義済み)。これらの文字列は、JSONの量によってはかなり大きくなる可能性があります。また、JSONObjectはStringBufferを使用するので、私が行う多くのことの1つは、出現するすべてのStringBufferをStringBuilderに置き換えることです。
JSONObject(org.jsonから)は、使用できる単純なJSONライブラリの1つです。非常に効率的なものが必要な場合は、ジャクソンなどを使用してください。
パフォーマンスのオーバーヘッドは、データのキャストのみです。 JSONObject
はオブジェクトのHashMap
にデータを格納し、必要なデータ型をキャストします。