【问题标题】:Unique number generation using shift operator and validate same with the bitwise & operator in java使用移位运算符生成唯一数字,并与 java 中的按位 & 运算符验证相同
【发布时间】:2010-12-15 11:45:41
【问题描述】:

我正在使用 Java 中的 LEFT SHIFT 运算符生成一些唯一的数字,并使用下面的按位 & 运算符进行验证。

// 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 生成相同的号码 -

if ( request_number >= 0 && (request_number & UNIQUE_NUMBER10) != 0){
    System.out.println("Valid");
}else{
    System.out.println("Invalid");
}

但使用上述条件,我无法验证 1

请帮助我也使用上述或类似的逻辑生成唯一编号 并使用按位 & 运算符进行验证。

谢谢

【问题讨论】:

  • 嗨。这是您的第七个问题,现在您应该掌握格式化的窍门。当您提出问题时,右侧有一个标有如何格式化的框。值得一读。此外,Ask a Question 框上方的 [?] 链接包含大量格式信息。
  • 感谢 T.J Crowder 提供的信息。下次我会照顾它..

标签: java


【解决方案1】:

您检查该数字是否为负数。您只能设置 0 到 62 位并且仍然是非负数。

也许您应该使用 BitSet,您不需要所有常量,并且您可以拥有几乎任意数量的位。

但是,要生成唯一 ID,您可以创建 UUID,或使用 System.currentTimeMillis()(检查重复项)或仅使用 AtomicLong.incrementAndGet(),具体取决于您需要的唯一 ID 类型。

这些方法通过始终增加用于生成 id 的数字来避免记住以前的 id。 UUID 跨系统是唯一的,但是比较繁琐,使用 currentTimeMillis 可以是唯一的,即使系统重启(并且有内置的时间戳),AtomicLong 是最轻量的,但系统重启时会重启。

【讨论】:

    【解决方案2】:

    您可以在每次有新请求时生成一个 UUID。将其添加到 Set 以检查其是否已被创建/使用。因此,您拥有几乎无限数量的 id。

    请看这里:http://www.javapractices.com/topic/TopicAction.do?Id=56

    【讨论】:

      【解决方案3】:

      使用BitSet 是您更好的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-06
        • 1970-01-01
        • 2016-04-12
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多