-1

私のコードでは、ハッシュマップに数値が存在するかどうかを取得しようとしています。私のコードは次のとおりです。

BitSet arp = new BitSet();

for i = 0 to 10 million

HashMap.get (i)

if number exist
arp.set(i , true)

else
arp.set(i , false)

その後、ビットセットから、番号iが存在するかどうかを取得します。ただし、このビットセットの動作は非常に遅いことがわかりました(string = string + 0/1また、より低速で試してみました)。誰かがこの操作をより速いものに置き換える方法を教えてもらえますか?

4

2 に答える 2

3

あなたのコードははっきりと読むのが本当に難しいです、しかし私はあなたがBitSetあなたのキーであるビットを設定しようとしているだけだと思いますHashMapか?

その場合、コードは多かれ少なかれあるはずです

BitSet bits = new BitSet(10000000);
for (Integer k : map.keySet()) {
  bits.set(k);
}

これがあなたの意図したことではなかったとしても、原則として、BitSet猛烈な勢いで進んでいます。遅いのはコードの残りの部分だと思います。

于 2012-07-03T15:52:43.740 に答える
2

実際の関連コードを提供していただければ、最初にいくつかのパフォーマンス エラーを発見できた可能性があります。ただし、コードに問題がなく、アプリケーションのプロファイルBitSetを作成して、操作が実際に遅いことを確認したと仮定します。

利用可能なメモリ容量が十分にある場合は、いつでも のboolean[]代わりに を使用できますBitSet

BitSet内部long[]で個別のビットを格納するために使用されるため、メモリに関しては非常に優れていますが、少し遅すぎる場合があります。

于 2012-07-03T15:59:49.857 に答える