3

私のアプリでは、データの主なセットは2次元の文字配列(char[][])で、一部の値は印刷不可能な文字で、さらには\0文字。この配列を共有の環境変数に保存して後で取得する最も速い方法は何でしょうか?検索のスピードは、それを保存するスピードよりもはるかに重要です。配列はそれほど大きくなく、恐らく100x100以下である。共有設定でchar [] []を保存する最速の方法

現在、すべての文字を行単位で連結し、文字列を次元とともに(intとして)格納するだけで、文字列に変換しています。

また、アレイをシリアル化して(writeObjectByteArrayOutputStreramとし、ストリームのtoStringメソッドを使用しています)、まだ試していません。

他の提案はありますか?繰り返しになりますが、可能な限り早い検索(char [] []配列としてのレクリエーション)が私の主な関心事です。

答えて

0

StringSet方法(入れてもらう)は、アンドロイド3.0からのみ利用可能であり、また、私は長い文字列、0-文字を含む特にを格納する際の好みが信頼できる未満であること見つけたので、私は別の方法を使用しているためアプリにデータを保存する。

内部ファイル(fileGetInputfileGetOutput)を使用して、HashMap<Integer, char[][]>を作成し、writeObjectを使用してファイルに書き込みます。整数IDで識別されるこれらのchar配列のいくつかを持っているので、この方法ですべてを1つに保存します。

私はパフォーマンスの面で何かを失っているかもしれないが、この場合は信頼性が最優先です。

0

多くのネイティブ関数を使用する方法を紹介しましたので、おそらく高速です。これはテストされておらず、インスピレーションを受けて使用されるだけであることに注意してください。

public void save(char[][] chars) { 
    Set<String> strings = new LinkedHashSet<String>(chars.length); 

    for(int i = 0, len = chars.length; i < len; i++) { 
     strings[i] = new String(chars[i]); 
    } 

    getSharedPreferences().edit().putStringSet("data", strings).commit(); 
} 

public char[][] read() { 
    Set<String> strings = getSharedPreferences().getStringSet("data", new LinkedHashSet<String>()); 

    char[][] chars = new char[strings.size][]; 
    int i = 0; 

    for(String line : strings) { 
     chars[i++] = line.toCharArray(); 
    } 

    return chars; 
} 
+0

答えていただきありがとうございます。残念ながら、環境設定の 'StringSet'メソッドはAndroid 3.0以降でしか利用できません。私のアプリは上記の1.6から動作する必要があります。 –

+0

私の解決策の弱点を見ています。小さなヒント:パフォーマンスが懸念される場合は、HashMap または[SparseArray](http://developer.android.com/reference/android/util/SparseArray.html)を使用してください。 >。 – damaxxed

+0

ありがとう!コレクションに3〜4個のアイテムしかないのに、それほど大したことはありませんが、サイズが大きくなるにつれて、私は間違いなく変更を行います。 –

関連する問題