Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现ID的好方法是什么?_Java_Uuid - Fatal编程技术网

Java 实现ID的好方法是什么?

Java 实现ID的好方法是什么?,java,uuid,Java,Uuid,我正在为自己构建一个小项目,每次创建员工时,都会给他们一个ID 此Id是通过查找ArrayList的.size生成的 我知道这是个坏主意,因为当删除员工时,Id将开始复制 这是我在创建员工时使用的函数 public void addHiredEmployee() { Scanner kb = new Scanner(System.in); System.out.println("Enter Name: "); String nameEmployee = kb.nex

我正在为自己构建一个小项目,每次创建员工时,都会给他们一个ID

此Id是通过查找ArrayList的.size生成的

我知道这是个坏主意,因为当删除员工时,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,但由于员工Id将用于登录,我真的不能期望有人输入完整的UUID


有没有一种简单的方法可以创建一个随机Id,或者我可以仅在登录时使用UUID的最后4个字符?我如何实现选择最后4个字符?

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

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


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

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

long id = System.currentTimeMillis();

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

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

用于在web应用程序中创建会话id。它还用于创建事务id。 它扩展了对象类。 它实现了可序列化和可比较的接口

现在让我们进入实施阶段:-

使用java.util.UUID包

UUID uniqId = UUID.randomUUID(); 

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

为什么不声明一个计数器,并在每次需要新ID时递增它?这是否有帮助:ID应该只是一个技术标识符,不应该向用户公开。因此,将其用于登录目的不是一个好主意。相反,添加一个昵称之类的东西,并用它来登录为什么否决投票是一个有效的问题??解释why@Liam我并没有投反对票,尽管我认为这个问题更适合于说明这并不能确保唯一性。即使我们排除了并行性,当前系统时间也会漂移,并且可以通过外部因素(如通过互联网的同步)进行校正。导致此方法再次出现相同的时间。抱歉,我之前看不到答案,我想我重复了:-
UUID uniqId = UUID.randomUUID();