什么是实现 ID 的好方法?

What is a good way of implementing a ID?

我正在为自己构建一个小项目,每次创建 Employee 时都会为它们提供一个 ID。

此 Id 是通过查找 ArrayList.

.size() 生成的
//Creating the Employee Id
int employeeID = listEmployee.size() +1;

我知道这是个坏主意,因为在删除员工时,Id 的星号会重复。

这是我在创建员工时使用的功能

 public void addHiredEmployee() {
    Scanner kb = new Scanner(System.in);


    System.out.println("Enter Name: ");
    String nameEmployee = kb.nextLine();

    //Creating Id for the employee by getting the last employee in the list 
    //getting their Id and adding 1 to it 
    Employee lastEmployee = listEmployee.get(listEmployee.size() -1);

    int idCreation = lastEmployee.getEmployeeId();
    int employeeID = idCreation + 1;

    System.out.println("Enter password");
    String employeePassword = kb.nextLine();

    System.out.println("Your log-in Id is: " + employeeID);

    Employee employeeHired = new Employee(nameEmployee, employeeID, 
    employeePassword);

    listEmployee.add(employeeHired);

    kb.close();

    listEmployee.toString();
}

我知道如何使用 UUID,但由于 Employee ID 将用于登录,我真的不能指望有人输入完整的 UUID。

是否有创建随机 ID 的简单方法,甚至可以使用 UUID 的最后 4 个字符仅用于登录,我如何实现选择最后 4 个字符?

这取决于您需要 ID 的用途。通常,技术 ID 在系统的整个生命周期中应该是唯一的。对于数据库,这些通常是自动递增的数值。他们不计算计数,而是存储最后使用的 id 并递增它。

对于登录等,您可能需要使用其他内容,例如用户名。这通常称为功能 ID 或业务 ID。它仍然是独一无二的,但要求不那么严格。例如,它可以重复使用。

如果您需要在高度并行的环境中创建 ID,UUID 是个好主意。虽然它们可以在不同步的情况下并行生成,但它们还有其他缺点,例如难以索引、长度和存储要求等。

通常 ID 是一个不可见的参数。简单的方法,如果你使用基于日期时间的 id。示例:

long id = System.currentTimeMillis();

为每个员工创建随机 Id 的最佳方法是使用 UUID。

class 表示不可变的通用唯一标识符 (UUID)。 UUID 代表一个 128 位的值。这些全局标识符存在不同的变体。此 class 的方法用于操纵 Leach-Salz 变体,尽管构造函数允许创建 UUID 的任何变体(如下所述)。 UUID 有四种不同的基本类型:基于时间、DCE 安全、基于名称和随机生成的 UUID。这些类型的版本值分别为 1、2、3 和 4。

用于在 Web 应用程序中创建会话 ID。它还用于创建交易 ID。 它扩展了对象 class。 它实现了 Serializable 和 Comparable 接口。

现在让我们开始实施:-

使用java.util.UUID包

UUID uniqId = UUID.randomUUID(); 

每次您使用它时,您都会为您的员工获得一个随机 ID。