1

特定のキー (長い値) が Java のアイテムの小さなコレクション (100 未満、通常は約 10) に存在するかどうかを確認する非常に効率的な方法を実装する必要があります。

このチェックは、1 秒あたり数回 (1000 回以上、マルチキャスト フィードを処理しており、処理する必要のないメッセージを破棄したい) 行われるため、できるだけ効率的である必要があります。

チェックする必要がある項目は、アプリケーションのライフ サイクル中にほとんど変化せず、パフォーマンスの点でコストがかかる可能性があります。

ありがとう

すべての迅速な返信に感謝します。私の懸念は、長いキーが長いキーの狭い範囲に非常に集中している可能性があることであり、心配しています。問題ないと思われる方は、試してみてください。

4

2 に答える 2

3

a を使用HashSet<Long>- が返されるまでに (文字通り) ナノ秒かかりcontains()ます。

次のようにコーディングします。

private static Set<Long> keys = new HashSet<Long>();
// populate keys

if (keys.contains(requestKey)) { // this call is super fast!
    // ignore request
}

編集:

あなたのロングが一緒に「近い」ことを心配しないでください. hashCode()ofは十分に「Long散在」しているため、実用的な目的ではパターンがありません。つまり、「近い」Long には「近い」ハッシュ コードはありません。

于 2012-05-30T14:32:04.033 に答える
0

汎用性よりも効率が優先される場合は、Trove のTLongHashSet:

長いプリミティブ用のオープン アドレス セットの実装。

これにより、O(1) が得られ、オートボクシングが完全に回避されます。しかし、これは、このような小さなコレクションには極端な選択かもしれません。

于 2012-05-30T14:28:34.103 に答える