为了账号安全,请及时绑定邮箱和手机立即绑定

如何为非随机对象创建唯一 ID

如何为非随机对象创建唯一 ID

饮歌长啸 2022-05-25 10:29:16
问题我需要id为每个Person对象创建一个唯一的。public interface Person {    String getName();}public class Chef implements Person{    String name;    ....    // all other instance variables are not unique to this object.}public class Waiter implements Person{    String name;    ....    // all other instance variables are not unique to this object.}额外的信息中的所有其他实例变量Chef对于特定的Chef. 我们也不能在Chef类中添加任何额外的变量以使其唯一。这是因为此信息来自后端服务器,我无法修改Chef该类。这是一个分布式系统。我想要做什么我想创建一个整数来映射这个Person对象。我试图创造一个“独特的” id。private int makeId(Person person){    int id = person.getName()        .concat(person.getClass().getSimpleName())        .hashCode();    return id;}但是,我知道这并不是真正唯一的,因为名称的 hashCode 不能保证任何唯一性。不使用随机我可以使这个id独一无二吗?很抱歉造成误解,但我无法向我的Chef或Waiter对象类添加更多字段,并且应用程序已分发。
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

如果您的应用程序不是分布式的,只需在构建过程中使用静态计数器:


public class Chef {


    private static int nextId = 1;


    private final String name;

    private final int id;


    public Chef(String name){

        this.name = name;

        this.id = Chef.nextId++;

    }

}

第一个的 idChef是 1,第二个是 2,依此类推。


如果您的程序是多线程的,请使用AtomicIntegerfornextId而不是 plain int。


只是不要hashCode用作唯一的ID。根据定义,哈希码不必是唯一的。


查看完整回答
反对 回复 2022-05-25
?
三国纷争

TA贡献1804条经验 获得超7个赞

添加全局唯一标识符 (GUID) 怎么样?

GUID 是一个 128 位整数(16 个字节),可以在需要唯一标识符的所有计算机和网络中使用。这样的标识符被复制的概率非常低。

在 Java 中,它被称为UUID。例如:

UUID uuid = java.util.UUID.randomUUID();
System.out.println(uuid.toString());


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 224 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号