您好,我有一个产生1000万员工的问题。每个人都必须具有唯一的ID号。
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
employees.contains(employee.getId())
每次添加ID时都要检查的方式是一种无效的方式。最简单的方法是在中创建static
变量Employee
并获取下一个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();
这样,您employeeObject.setId(Employee.nextId())
在创建Employee对象时不必调用,并且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++;
}
如有任何疑问/问题,请随时发表评论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句