您好,我有一个产生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
问题来源:Stack Overflow
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++;
}
如有任何疑问/问题,请随时发表评论。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。