问题在于我无法创建一个唯一的学生编号,有时我在存储学生时得到相同的学生ID,无论如何生成唯一的studentID编号,我需要修改存储方法以便创建一个唯一的< / p>
public class Collection
{
private ArrayList<Student> studentList;
public Collection()
{
studentList = new ArrayList<Student>();
}
public void storeStudent(Student student)
{
student.setId(createId("AB",9));
studentList.add(student);
}
public String createId(String pre, int number)
{
Random random = new Random();
int index = random.nextInt(number);
return pre + index + " ";
}
}
public class Student
{
private String studentId;
private String name;
public Student( String name)
{
studentId = "UnKnow";
this.name = name;
}
public void setId(String id)
{
studentId = id;
}
}
答案 0 :(得分:4)
您可以使用UUID:
public String createId() //don't need the arguments any more
{
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
极不可能发生冲突。
答案 1 :(得分:2)
使studentId变量静态并创建静态方法以生成studentId。
private static studentId = 0;
...
public static int generateStudentId()
{
return studentId++;
}
如果您停止应用并重新启动,您可能还希望将此值存储到数据库或文件中,或者无论如何。
答案 2 :(得分:1)
private static final AtomicInteger idIncrement = new AtomicInteger();
public static String createId(String pre /*, int number -- no longer needed*/)
{
int index = idIncrement.incrementAndGet();
return pre + index + " ";
}
这将为您提供线程安全的唯一有序学生ID。
答案 3 :(得分:0)
试
class Collection {
static long id = System.currentTimeMillis();
public void storeStudent(Student student) {
student.setId(++id + "");
studentList.add(student);
}
即使重新启动应用后,它也会保证唯一ID。请注意,它不是线程安全的,如果您需要它是线程安全的,请使用AtomicLong id = new AtomicLong(System.currentTimeMillis)。
答案 4 :(得分:0)
尝试在集合中使用Set。它不允许重复。您也可以轻松地将Set转换为List,如下所示。
List<T> list = new ArrayList<T>(set);
关于set的简要教程。
希望这对你有所帮助。
谢谢你。