1

〜50.000文字列のセットを保存するAndroidアプリケーションを作成していますが、それらを最適に保存する方法について入力する必要があります。

私の目的は、パターン (または など) に一致する文字列のリストを低レイテンシでクエリできるようにすることですが、初期化に膨大な時間を費やすことは避けます。Hello W**m Aliv*

以下の2つの方法を考えました。

  1. Java コレクション。Java コレクションはすばやく検索できるはずだと思いますが、かなり大きいため、アプリの初期化時間に大きな影響を与えるのではないかと心配しています。
  2. SQLite データベース内のテーブル。これは初期化時に簡単になると思いますが(メモリにロードする必要がないため)、SQLiteプロセスを開始する必要があるため、クエリが関連するレイテンシを課すのではないかと心配しています(そうではありませんか? )。

私の「想像」は正しいですか、それともひどく間違っていますか? どの方法が最適でしょうか?

4

4 に答える 4

5

迅速な (瞬時の) 検索時間が必要な場合は、文字列の全文インデックスが必要です。幸いなことに、SQLite にはFTS 拡張機能による全文検索のサポートがいくつかあります。SQLite は Android API の一部であり、初期化時間はごくわずかです。あなたが見なければならないことは、インデックス(.sqliteファイル)が.apkでアプリに同梱されているか、最初に開いたときに再作成する必要があることです(かなり時間がかかる場合があります)

于 2013-08-22T19:14:12.557 に答える
1

パトリシア トライ ( http://en.wikipedia.org/wiki/Radix_tree ) や三分探索木 ( http://en.wikipedia.org/wiki/Ternary_search_tree ) のようなデータ構造を見てください。これらは検索時間を劇的に短縮し、文字列のオーバーラップの量によっては実際に必要なメモリを減らすことができます。Java コレクションは多くの目的に適していますが、短い文字列の大規模なセットには最適ではありません。

于 2013-08-22T19:06:52.893 に答える
1

私は間違いなくSQLiteに固執します。初期化とクエリの両方で非常に高速です。SQLite はアプリケーション プロセスで実行されるため、初期化にかかる時間のペナルティはほとんどありません。メイン スレッドをブロックしないように、通常、クエリはバックグラウンド スレッドで起動されます。50.000 レコードでは非常に高速で、すべてのデータをメモリにロードするわけではありません。これも重要です。

于 2013-08-22T19:14:15.663 に答える
-1

この場合、文字列番号は 50 です。Java コレクション データベースを使用できますが、時間がかかります。

于 2013-08-22T19:07:16.537 に答える