0

问题是我无法创建唯一的学生编号,有时我在存储学生时得到相同的学生 ID,是否有生成唯一的学生 ID 编号,我需要修改存储方法以便创建唯一的

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;
}
}
4

5 回答 5

4

您可以使用 UUID:

public String createId() //don't need the arguments any more
{
     UUID uuid = UUID.randomUUID();
     return uuid.toString();
}

极不可能发生冲突。

于 2013-03-25T12:20:20.793 回答
2

将 studentId 变量设为静态并创建静态方法以生成 studentId。

private static studentId = 0;
...
public static int generateStudentId()
{
return studentId++;
}

您可能还想将此值存储到 db 或 file 或其他任何东西,以防您停止应用程序并重新启动。

于 2013-03-25T12:16:25.620 回答
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。

于 2013-03-25T12:20:01.700 回答
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)。

于 2013-03-25T12:18:46.617 回答
0

尝试在集合中使用 Set。它不允许重复。您也可以轻松地将 Set 转换为 List,如下所示。

List<T> list = new ArrayList<T>(set);

片场简要教程。

希望这对您有所帮助。

谢谢。

于 2013-03-25T12:27:38.903 回答