使类生成短序列唯一ID

时间:2012-11-26 18:15:27

标签: java

我有一个班级(下)。我有类的字段ID,但我不知道如何使它创建一个连续增加的唯一ID。

我发现UUID.randomUUID();会生成一个唯一的ID,但是方式非常不友好,无法限制大小。

如果从下面的类创建对象,我怎么能实现增加id字段的东西?

class Customer {

public int id;
public String name;
public String email;
public String number;
public String issue;
public String expiry;

Customer(String eName, String eEmail, String eNumber, String eIssue, String eExpiry)
{
    id = 0935091285;
    name = eName;
    email = eEmail;
    number = eNumber;
    issue = eIssue;
    expiry = eExpiry;
}
}

2 个答案:

答案 0 :(得分:4)

您没有指定是否有多个进程同时生成ID。如果不这样做,以下内容很简单,效果很好:

public class Customer {
  private static AtomicInteger nextId = new AtomicInteger(0);
  private static String getNextId() {
    return Integer.toString(nextId.incrementAndGet());
  }
  public Customer(...) {
    id = getNextId();
    ...
  }
}

如果您想要使用id的字典顺序来反映对象创建顺序,请使用前导零格式化数字ID。

答案 1 :(得分:1)

我不确定我理解为什么UUID发生器无法满足您的需求。大小是固定的(36个字符)。我可以理解,非顺序部分可能是一个问题。

如果你需要顺序生成唯一标识符(并且考虑到你已经尝试过UUID,我想你已经尝试过一个简单的增量系统),并且可能在大规模上我建议你去看看{{ 3}},twitter用来生成连续但非增量的ID的服务。

基本上它是一个简单的服务器,你可以运行,并在你需要时为你生成唯一的标识符:

  
      
  • 用Scala编写的Thrift服务器
  •   
  • id由以下内容组成:

         
        
    • 时间 - 41位(毫秒精度w /自定义时代给我们69年)
    •   
    • 配置的机器ID - 10位 - 最多可提供1024台机器
    •   
    • 序列号 - 12位 - 每台机器每4096个滚动一次(保护要避免   在相同的时间内翻转))
    •   
  •   

<强>资源: