0

テーブルで定義されているように、レガシー デバイスの 16 ビット コードを文字列に変換しています。2,000 以上のコードがあり、コードは連続していません。

それらは現在、このような HashMap で定義されています...

public class SomeActivity {
    private static final Map<Integer, String> myMap;
    static {
        Map<Integer, String> aMap = ...;
        aMap.put(0x2345, "this");
        aMap.put(0xFEA3, "that");
        ...
        myMap = Collections.unmodifiableMap(aMap);
    }
}

これは android に移植されており、これがデバイスでどれだけの RAM を使用するかが心配です。同様のことができますが、プログラムメモリに保存できますか?

4

2 に答える 2

2

コードは連続していない可能性がありますが、かなり密集している場合 (つまり、min(keys)との間の数が存在する可能性が高く、たとえば 75% 以上)は、サイズのオブジェクトを事前に構築して使用することでmax(keys)、スペースを節約できる可能性があります。地図のように。String[]max(keys)-min(keys)

利用可能/Android開発のオプションである場合、プリミティブマップやその他のデータ構造のもう1つの優れた代替手段は、プリミティブデータ構造を操作するときに同様に多くのスペースと時間を節約できるTroveライブラリです.

または、Collections.unmodifiableMap()Guava を検討してくださいImmutableMap。これは、自動ボクシング プリミティブを回避する Trove ほど効率的ではありませんが、Java の標準の HashMap よりもメモリ効率が高くなります (わずかに遅くなります)。

とはいえ、コメントが示唆するように、あなたは何も心配していない可能性が非常に高い. いつものように、「時期尚早の最適化は諸悪の根源です」。単純な Java HashMap がうまく機能する可能性が非常に高いです。

于 2013-05-02T18:56:44.890 に答える
1

A SparseArray( http://developer.android.com/reference/android/util/SparseArray.html ) は、基本的な HashMap よりも適しています。

プログラムのアセットに入れるプロパティファイル(http://developer.android.com/reference/java/util/Properties.htmlを参照)に入れることもできます(すべてのファイルをロードする必要があります1つの値を読み取るためのメモリ)

そこから sqlite データベースを事前に作成し、アセットからコピーすることもできます ( http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/を参照)。この場合、値はファイルにあり、必要な要素のみがロードされます。

ただし、文字列が非常に長い場合を除き、RAM に 2000 個のアイテムがあることを心配する必要はありません。

于 2013-05-03T14:06:53.993 に答える