我正在为学校生成4位数字PIN码,这些PIN码必须以4位字符字符串的形式存储在数据库中。这是我用来生成PIN码的方法:
public void generatePin() {
String pin;
Random r = new Random();
for (int i = 0; i < createdStudents.size(); i++) {
int rand = r.nextInt((3998 - 1) + 1) + 1;
if (rand < 10) {
pin = "000" + rand;
} else if (rand < 100) {
pin = "00" + rand;
} else if (rand < 1000) {
pin = "0" + rand;
} else {
pin = "" + rand;
}
createdStudents.get(i).setPin(pin);
}
}
我的问题是:
如果我稍微改变上面的方法,把每个PIN添加到一个String类型的ArrayList中,那么最有效的方法是什么,以便在该列表中进行“搜索”,确保同一所学校的两个学生不会使用相同的PIN?
(说明:每个学校永远不会有超过1,200名学生)
编辑:
最终我做了以下处理:
public void generatePin() {
List<String> pins = new ArrayList<String>();
String pin;
Random r = new Random();
for (int i = 0; i < createdStudents.size(); i++) {
int rand = r.nextInt((9999 - 1) + 1) + 1;
if (rand < 10) {
pin = "000" + rand;
} else if (rand < 100) {
pin = "00" + rand;
} else if (rand < 1000) {
pin = "0" + rand;
} else {
pin = "" + rand;
}
if (!pins.contains(pin)) {
createdStudents.get(i).setPin(pin);
pins.add(pin);
} else {
i--;
}
}
}
创建一个ArrayList来存储密码,每次生成后检查是否存在于ArrayList中。如果不存在,则分配给学生。如果存在,则将循环计数器减一以返回到刚引用的列表索引并生成新的密码。这将继续进行,直到生成唯一的密码,并将其分配给学生。
if(!list.contains(pin))list.add(pin);
- XtremeBaumer