2

文字列として数値 L1 のリストがあります (例: "2443")。そのような別のリスト L2 があります。L1 の各数値を L2 の数値と比較する必要があります。L1 には約 20,000 の数字があります (多くは繰り返されます)。L2 には約 600 の番号があり、すべてが一意です。

L1 と L2 を他の形式で取得できません。

比較するのに最適な方法を知りたい -

  1. すべての数値を Long.parseLong() で Long に変換してから比較しますか?
  2. 文字列として比較しますか?

どちらがより効率的でしょうか? 1では文字列を解析する必要があるため、ほぼ同じであると思われます。それはオーバーヘッドです。

編集 -

例を思いつきました。L1 は、タイタニック (ロマンス) を見た Netflix customer_ID のリストです。L2はシュレック(アニメ)を見たcustomer_IDのリストです。L1 の少なくとも 70% がシュレックも視聴している場合は、アニメ映画を推奨します。また、ロマンチックな映画が好きな人は、アニメ映画も好きかもしれないことに注意してください. ばかげた例ですが、意味があると思います。

L1 の要素の数を数えます。これを count と呼びます。次に、L1 の要素が L2 に存在するかどうかを確認します。true の場合、'found' を 1 増やします。found/count を計算します。70% を超える場合は、アニメ映画をロマンス愛好家におすすめします。

4

4 に答える 4

2

文字列比較は辞書順で比較します: docs を参照してください。これは、 で設定された順序に従って、「1000」<「8000」<「900」を意味しString.compareToます。

したがって、適切な数値順序が必要な場合は、整数に変換することをお勧めします。使用できますInteger.parseInt(str)

于 2013-05-29T17:33:02.393 に答える
2

ここには少し不足している情報があります。これらを数値に変換する必要はありますか? 平等に比較してるだけ?唯一のポイントが等価比較であり、実際に数値を Long として取得しない場合は、数値に変換しない方がよいでしょう:

数値に変換しないと、最悪の場合、各文字列を L1 * L2 回読み取ることになります。しかし、平均的なケースでは、文字列のサイズが異なり、最後の数字だけが異なるわけではないため、これらの比較の多くは迅速に追跡されます。

数値への変換では、すべての単一文字列 (L1 * L2 回) を読み取ってから、その上に int 比較を追加する必要があります。

入力文字列がクリーンであることが保証されていない場合、これはより複雑になります (" 2"およびを取得できますか"2")。

文字列として数字を含む 2 つのランダムなリストを生成する簡単な逸話的な演習を実行すると、文字列の比較が大幅に高速になることがわかります (ミリ秒単位の数字、ヒット数は等しい数字の数です)。

Compare Strings: 249.0363 (hits: 600)
Compare with Convert: 2505.3822 (hits: 600) 

これは、複数の実行にわたって再現し続けます。

于 2013-05-29T17:34:22.680 に答える