0

JSON から解析された POJO があります。

Account [] accounts; 

class Account {
  Integer number;
  String name;
  String location;
  Date started;
}

JSON API 呼び出しからアカウントのリストを取得します。Jackson マッパーは、結果の JSON を上記の POJO にマップします。これらのオブジェクトに対して検索やその他の操作を行う必要があります。

これらを検索して表示するためにこれらを保存する方法がわかりません(Androidで)。

ArrayList
Map
HashTable
...

など。検索は高速である必要があります。私は平均して約500のアカウントを取得しています。マッピングが完了し、オブジェクトが配列になりました。しかし、ここからどうすればよいかわかりません。

さらに、私はJavaのコレクションとジェネリックについてはまったくの初心者です。したがって、方向のあるコード例は役に立ちます。

ありがとう!

4

2 に答える 2

4

500 のアカウントは実際には膨大な数ではありません。アプリケーションが小さく、ほとんど使用されない場合 (つまり、何千もの同時クエリを実行する Web サービスではない場合)、直線的な検索でうまくいく可能性があります。

そうではないと仮定すると、それは良い仮定のように思えますが、頻繁にクエリを実行することが予想されるフィールドのインデックスを作成する必要があります。主に名前で検索する場合は、小文字バージョンの名前でハッシュマップを作成できます

nameIndex = new HashMap<String, Account>();
for (Account a : accountArray) {
    nameIndex.put(a.name.toLowerCase(), a);
}

次に、「正確な名前」を小文字で検索するには、クエリを検索してから を呼び出しますnameIndex.get

日付による検索も可能ですが、ここでは日付範囲で検索することを想定しています。この場合、ソートされたリスト インデックスまたはツリー インデックスを作成することができます。次に、リストまたはツリーをナビゲートして目的の範囲を見つけます。

名前の正規表現または私の名前の近接性 (バイグラム、トライグラム) によるルックアップも実行できます。多くのオプションがあります。

ところで、データベースはこの種のことをうまくやっています。H2のような組み込みデータベースにデータを入力することを検討するかもしれませんが、それはやり過ぎかもしれません。でも、学ぶのは楽しいです。データベースのほかに、同時実行制御とキャッシングを freeeeeeee! で利用できます。

TL;DR: 頻繁に使用するクエリのハッシュマップ、ツリーマップ、または単純な並べ替えリスト インデックスを作成し、複雑なカスタム クエリの線形検索を実行します。または、これが好ましいかもしれません: 組み込みデータベースを使用します。

于 2012-09-18T01:27:08.333 に答える
2

検索していて、検索対象のキーを 1 つ特定できる場合は、 をお勧めしHashMapます。これは、キーがあれば O(1) でアクセスできるためです。

HashTableJDK 1.0 ヴィンテージです。それを選ばないでください。

番号が一意であり、適切な検索の選択肢を表すと仮定した例を次に示します。

Account a = new Account(123456);
Map<Integer, Account> accounts = new HashMap<Integer, Account>();
accounts.put(a.getNumber(), a);

アクセスするには、次の番号を使用します。

Account b = accounts.get(123456);
于 2012-09-18T01:12:49.623 に答える