2010-12-15 7 views
0

Ich benutze LEFT SHIFT-Operator von Java, um einige eindeutige Nummer generieren und validieren Sie mit dem bitweisen Operator & wie unten.Eindeutige Nummer Generation mit Shift-Operator und validiere das gleiche mit dem bitweisen & Operator in 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; 

bis

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

und Validierung von der gleichen, ich tue unter Bedingung verwenden, wo request_number wird aus der URL kommen, die URL zugewiesen wird, um die gleiche generierte Zahl -

Aber unter Verwendung der obigen Bedingung bin ich nicht in der Lage, Zahlen über 1 < < 62 zu validieren, Da alle Nummern bis 62 verwendet werden und darüber wird wieder die gleichen Nummern, die bereits verwendet werden und daher die bitweise & Bedingung ist fehlgeschlagen.

Bitte helfen Sie mir auch einzigartige Nummer mit obigen oder ähnliche Logik generieren und mit dem bitweisen & Operator zu validieren.

Danke

+0

Hallo. Dies ist Ihre ** siebte ** Frage, mit Respekt sollten Sie jetzt den Hang der Formatierung haben. Als du deine Frage gestellt hast, war rechts ein Kästchen mit der Aufschrift ** How to Format **. Eine Lektüre wert. Außerdem hat der Link ** [?] ** über dem Feld Frage stellen viele Formatierungsinformationen. –

+0

Danke für die Info T.J Crowder. Nächstes Mal werde ich mich darum kümmern. – techiepark

Antwort

3

Sie überprüfen, dass die Nummer nicht negativ ist. Sie können nur die Bits 0 bis 62 setzen und immer noch nicht negativ sein.

Vielleicht sollten Sie BitSet verwenden, Sie brauchen nicht alle Konstanten und Sie können fast jede Anzahl von Bits haben.

Um eine eindeutige ID zu generieren, können Sie jedoch entweder UUID erstellen oder System.currentTimeMillis() (auf Duplikate prüfen) oder AtomicLong.incrementAndGet() verwenden, je nachdem, welche Art von eindeutiger ID Sie benötigen.

Diese Ansätze vermeiden die Notwendigkeit, vorherige IDs zu behalten, indem sie immer die Zahl erhöhen, die zum Generieren der ID verwendet wird. UUID ist systemübergreifend einzigartig, ist aber relativ komerziell. Die Verwendung von currentTimeMillis kann sogar dann eindeutig sein, wenn das System neu gestartet wird (und einen eingebauten Zeitstempel hat). AtomicLong ist das leichteste, startet aber neu, wenn das System dies tut.

0

Mit BitSet eine für Sie bessere Option ist.