2015-10-10 10 views
5

Androidは独自のHashMapを実装していますが、Autoboxingを使用していないため、パフォーマンス(CPUまたはRAM)の方が優れていますか?私はここに読んだからHashMapではなくAndroidのArrayMapを使用するタイミングは?

https://developer.android.com/reference/android/support/v4/util/ArrayMap.html

私はそのサイズは、レコードの数百人を下回っていると頻繁に書き込まれるハッシュマップを持っている場合、私はArrayMapオブジェクトと私のHashMapオブジェクトを交換する必要があります。何百ものオブジェクトが含まれていて、一度だけ書き込まれて頻繁に読み込まれる場合、HashMapsをArrayMapsに置き換える必要はありません。私は正しい?

+0

* Autoboxing *を使用していない*、あなたはそれをどこで読んだのですか? – Blackbelt

+0

"配列のデータ構造(各項目のハッシュコードの整数配列)とキー/値のペアのObject配列のマッピングを保持しているので、配置されたすべてのエントリに対して余分なオブジェクトを作成する必要がありませんマップに " –

+0

ArrayMapはキーと値の両方のオブジェクト参照を格納するので、ボクシングを防ぎません。プリミティブ型を格納することでキーや値のボクシングを防ぐことができるSparseArrayクラスとは異なります。ドキュメントが述べていることは、HashMapクラスと比較して、ArrayMapは各キーと値のペアに対して "Map.Entry"中間オブジェクトを作成しないということです。 – BladeCoder

答えて

3

このような交換を試みる理由はありますか?

パフォーマンスを向上させる場合は、交換の前後で対策を講じ、交換が助けられているかどうかを確認する必要があります。

おそらく、努力の価値はありません。

5

あなたはこのビデオを見てみる必要があります。https://www.youtube.com/watch?v=ORgucLTtTDI
パーフェクト状況:
1.アイテムの数が少ない(< 1000)アクセスまたは挿入および欠失の多くが付いているが、オーバーヘッドがそうすることを十分にまれです本当に気づかれていない。
2.マップのコンテナ - マップのマップでは、サブマップのアイテム数が少なくなる傾向があり、しばしば多くの時間にわたって繰り返します。

2

ArrayMapは、マップが頻繁に更新されない場合は特に、HashMapよりも少ないメモリ量を使用し、数百項目まで推奨されます。メモリを割り当てる時間とメモリを解放する時間を短くしても、一般的なパフォーマンスが向上します。

すべての挿入に配列コピーが必要なため、更新のパフォーマンスが少し悪くなります。読み取りパフォーマンスは、少数のアイテムに匹敵し、バイナリ検索を使用します。

関連する問題