gpt4 book ai didi

java - 列表中的唯一数字

转载 作者:行者123 更新时间:2023-12-03 19:47:42 24 4
gpt4 key购买 nike

您好,我在生成 10000000 名员工时遇到了问题。每个人都必须有唯一的身份证号码。

List<Employee> employeesL = new LinkedList<>();

for (var i = 0; i < 1000000; i++) {
Employee employeeObject = new Employee();
employeeObject.setId(Math.abs(gen.nextLong()));
.
.
.
employeesL.add(employeeObject);
}

有没有可能比简单的 while 循环做得更好。我做了类似的事情:

public static void uniqueAdd(List<Employee> employees, Employee employee)
{
Random gen = new Random();
employee.setId(Math.abs(gen.nextLong()));

while (employees.contains(employee.getId())) {
employee.setId(Math.abs(gen.nextLong()));
}
}

唯一的问题是,这种方法需要很长时间才能培养出那么多员工。我也不能使用简单的迭代 id++

编辑:我需要创建 uniqueAdd 方法!我的教授给了我建议,我可以使用 Set,例如 HashSet

最佳答案

您所做的方式是一种非高效方式,因为您每次要添加 ID 时都在检查 employees.contains(employee.getId())。最简单的方法是在 Employee 中创建一个 static 变量并获取下一个 ID,如下所示:

private static int id = 0;

public static int nextId() {
return ++id;
}

然后,

for (var i = 0; i < 1000000; i++) {
Employee employeeObject = new Employee();
employeeObject.setId(Employee.nextId());
.
.
.
employeesL.add(employeeObject);
}

您甚至可以在构造函数中分配 id,如下所示:

this.id = nextId();

这样,您在创建 Employee 对象时不必调用 employeeObject.setId(Employee.nextId()),系统会自动分配唯一的 id到对象。

或者,

填充列表 employeesL 后,您可以使用以下机制设置 id

Set<Integer> idSet = new HashSet<Integer>();
Random random = new Random();
while (idSet.size() != 10000000) {
idSet.add(random.nextInt(Integer.MAX_VALUE));
}
System.out.println("10000000 unique IDs generated");

int i = 0;
for (Integer id: idSet) {
employeesL.get(i).setId(id);
i++;
}

如有任何疑问/问题,请随时发表评论。

关于java - 列表中的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60695748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com