我有一个班级(下)。我有类的字段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;
}
}
答案 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个滚动一次(保护要避免 在相同的时间内翻转))
<强>资源:强>