2010-12-15 13 views
0

JavaからLEFT SHIFT演算子を使用して、以下のようなビット単位の&演算子で固有の数値を生成して検証します。シフト演算子を使用して一意の番号を生成し、Javaのビット演算子&と同様に検証します

// Number generation 

public final static long UNIQUE_NUMBER8 = (long) 1 << 8; 
public final static long UNIQUE_NUMBER9 = (long) 1 << 9; 
public final static long UNIQUE_NUMBER10 = (long) 1 << 10; 

public final static long UNIQUE_NUMBER62 = (long) 1 << 62; 

そして同じの検証まで、私は条件の下に使用してやっている、REQUEST_NUMBERは URLに同じ生成された番号が割り当てられたURLから来ている -

上記の条件を使用すると、私は1より上の数値を検証できません。< < 62、 62までのすべての数字が使用されているため、すでに使用されている数字と同じ数字が に生成され、 というビット単位で&の条件が満たされていないためです。

上記のまたは類似のロジック を使用して一意の番号を生成し、ビット単位の&演算子でも同様に検証してください。

ありがとうございます。

+0

こんにちは。これはあなたの**第七問です。今のところ、あなたは書式設定が必要です。あなたがあなたの質問をしているとき、右側には、** How to Format **というボックスがありました。読む価値がある。また、Ask a Questionボックスの上の** [?] **リンクには多くの書式設定情報があります。 –

+0

T.J Crowderに感謝します。次回以降、私はそれを世話します.. – techiepark

答えて

3

数値が負ではないことを確認します。 0〜62のビットを設定することができ、それでもなお負ではありません。

おそらくBitSetを使用する必要があります。すべての定数が必要ではなく、ほとんどのビット数を使用できます。

しかし、一意のIDを生成するには、UUIDを作成するか、System.currentTimeMillis()(重複をチェックする)か、必要な一意のIDの種類に応じてAtomicLong.incrementAndGet()を使用します。

これらのアプローチでは、IDを生成するために使用された数を常に増やすことによって、以前のIDを覚える必要がなくなります。 UUIDはシステム間でユニークですが、比較的時間がかかりますが、currentTimeMillisを使用するとシステムが再起動しても(タイムスタンプが組み込まれていても)一意になります。AtomicLongは最も軽いですが、システムが再起動すると再起動します。

1

新しいリクエストがあるたびに、UUIDを生成できます。これをセットに追加して、すでに作成/使用されているかどうかを確認します。したがって、あなたはほとんど無制限のID番号を持っています。

はこちらをご覧ください:BitSetを使用してhttp://www.javapractices.com/topic/TopicAction.do?Id=56

0

はあなたのためのより良いオプションです。