2016-10-25 5 views
3

私はSparseArrayHashMap間のパフォーマンスとefficencyを知りたいとどちらが使用することをお勧めします。 SparseArrayを使用する際に分かりましたことができないとSparseArrayためHashmapSparseArrayとHashmapの違いは?

答えて

7

SparseArrayは、マップキーが整数であり、整数が0,1,2,3,4、... n - ではないことを意味する連続していない場合に選択する必要がありますが、43,2045 、12、5

それでは、あなたの鍵は整数でなく、シーケンシャル(0、1、2、3、4、... n)をした瞬間を想定してみましょう。この場合、コレクションの最良の選択は何でしょうか?さて、値がStringsであると仮定してください。この場合、ここでの最適な選択はString配列(String[])です。その理由は、String配列がパフォーマンスに最小限の影響を与えながらすべてのニーズに答えるからです。

myStringArray[0]は、キー '0'のStringの値を返します。以下同様です。我々は(それゆえ、「スパース」)配列内の一部の値が空であることを可能にする以外

SparseArrayは、まさにこのように動作します。 SparseArrayは、シーンの背後に大きな配列を作成し、値が配置されている配列のインデックスとして整数キーを使用します。基本的に

HashMapsもこのように動作 - 舞台裏の値を配置するために使用される大型の整数配列があります。唯一の違いは、HashMapsでは、キーは整数ではなく、何でもかまいません。この例では、キーがStringsであるとします。 HashMapは、ハッシュ関数を使用してこのStringキーを整数に変換し、それを使用して配列の値を配置します。これは、2つの異なるStringsが同じ整数を生成する場合につながる可能性があります。このような場合、HashMapは配列内の値をキューに入れるか、新しいキーを生成するなどの別の操作を実行します。これと、ハッシュ関数を介した整数キーの生成は、かなりのパフォーマンスを伴うことがあります。

SparseArrayはこれのどれも必要ありませんので、より効率的である、あなたは整数キーと完全以来、これを省略することができます。

+0

非常に良い説明。 – Mauker

+0

https://developer.android.comが存在しない場合、SparseArraysは「適切であることを意図していない」ため、「多数のアイテムを含む可能性のあるデータ構造」がある場合は、HashMapsを使用する必要があります。 –

2

Androidのドキュメントが検索が は、バイナリ検索を必要とし、追加と削除し、必要なので、それは、一般的に従来のHashMapのより遅い

  1. を言うとき配列内のエントリを削除し、
    のエントリを削除します。それは自動ボクシングのキーとそのデータ構造を回避できるので、
    はのための余分なエントリオブジェクトに依存しない、より多くのメモリオブジェクトに整数をマップするためにHashMapを使用してより効率的な 、両方
    であることを意図している

  2. 各マッピング。

です。キーがプリミティブ型である場合、ハースマップを置き換えるために疎配列を使用できます。

+0

簡潔かつ明確 –

+0

あなたの結論は間違っているようです。 https://developer.android.com/reference/android/util/SparseArray。html: "実装は、多数の項目を含む可能性があるデータ構造には適していません。検索はバイナリ検索を必要とし、配列内のエントリの挿入と削除が必要です。何百ものアイテムを保持するコンテナでは、パフォーマンスの差は重要ではなく、50%未満です。 –

関連する問題