如何拥有一个独特的学生ID

时间:2013-03-25 12:14:48

标签: java arrays methods random bluej

问题在于我无法创建一个唯一的学生编号,有时我在存储学生时得到相同的学生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;
}
}

5 个答案:

答案 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的简要教程。

希望这对你有所帮助。

谢谢你。