我正在使用来自java的LEFT SHIFT运算符来生成一些唯一的数字,并使用bitwise&运营商如下。
// 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生成相同的数字 -
if ( request_number >= 0 && (request_number & UNIQUE_NUMBER10) != 0){
System.out.println("Valid");
}else{
System.out.println("Invalid");
}
但是使用上述条件我无法验证大于1的数字<&lt; 62, 因为正在使用的所有数字都在62以上,所以它将产生 再次使用已经被使用过的相同数字 因此按位&amp;条件失败。
请帮助我使用上述或类似逻辑生成唯一编号 并按位和&amp;和验证相同操作
由于
答案 0 :(得分:3)
您检查该号码是否为否定数字。您只能设置0到62位,仍然是非负数。
也许你应该使用BitSet,你不需要所有的常量,你几乎可以有任意数量的位。
但是,要生成唯一ID,您可以创建UUID,也可以使用System.currentTimeMillis()(检查重复项)或仅使用AtomicLong.incrementAndGet(),具体取决于您需要的唯一ID类型。
这些方法通过始终增加用于生成id的数量来避免记住先前ID的需要。 UUID在系统中是唯一的但是相对简洁,即使系统重新启动(并且具有内置时间戳),currentTimeMillis也可以是唯一的,AtomicLong是最轻的,但是在系统启动时重新启动。
答案 1 :(得分:1)
每次有新请求时都可以生成UUID。将其添加到Set以检查是否已创建/使用它。因此,您拥有几乎无限数量的ID。
答案 2 :(得分:0)
使用BitSet
对您来说是更好的选择。