2013-03-28 1 views
-3

, 그래서 내가 중복을 피할 수있는 방법, 나는 while 루프와 각 루프를 시도했지만 내가 방금 모방 제안고유 한 난수를 생성하는 방법은 무엇입니까? 학생에 저장하는 동일한 ID를 가지고 발생할 수 있습니다 때

public void addStudent(Student student) 

{ 

student.setId(ganerateNewRandom("aa", 2)); 

students.add(student); 

} 






    public String ganerateNewRandom(String prefix, int number) 
{ 

    Random random = new Random(); 

    StringBuffer ret = new StringBuffer(prefix); 


    for(int i=0;i<number;i++) ret.append(random.nextInt(10)); 


    return ret.toString(); 


} 
+0

여기에이 주제가 중복되어 있습니다. 게시하기 전에 검색 기능을 사용하십시오. –

+0

값이 응용 프로그램에 대해 고유 할 'int seed' 변수를 사용하면 사용 할 때마다 증가합니다. 멀티 쓰레드 환경이라면,'AtomicInteger'를 사용해야합니다. –

+0

정말 좋은 예가 있습니다. 이 옵션을 선택합니다 : 는 "alpanumeric 부분 집합 1M 고유 한 임의 키를 생성" 이 왜 중요한 임의 http://stackoverflow.com/questions/11053377/generate-1m-unique-random-keys-with-alpanumeric-subset – signon

답변

5

작동하지 않았다 데이터베이스에서 수행되는 방식 : id=1으로 시작하여 매번 1 : id++까지 확대하십시오. 그런 식으로 각 학생은 고유 한 ID를 갖게되며 사용자는 임의의 숫자를 생성 할 필요가 없습니다.

+0

멀티 스레딩과 다중 JVM을 고려하지 않은 문제. – user1697575

+0

다중 JVM 또는 스레딩에 대해 아무도 언급하지 않았습니다. – Martinsos

1

임의의 숫자가 고유한지 확인하려면 이전의 모든 난수를 저장해야합니다.

저장 방법은 생성하려는 계획 수에 따라 다릅니다.

3

사용 java.util.UUID 관련하여 구글의 저장소를 체크 아웃하는 것이 좋습니다.

예 :

UUID myID = UUID.randomUUID(); 

RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace" 방법을 사용한다.

+0

좋은 팁! 글쎄, 나는 그들이 여전히 복제물을 얻을 수있는 작은 기회가 있다고 생각하지 않습니까? – Gab

+0

@Gab Java에서 UID 생성을위한 매우 견고하고 표준적인 방법. 자세한 정보는 RFC 4122를 참조하십시오. – user1697575

+0

위키 백과 : "다음 100 년 동안 매초 10 억 UUID를 생성 한 후에 만 ​​하나의 복제본을 만들 가능성은 약 50 %입니다." –

2

이 모든 것이 데이터베이스 ID를 생성하는 데 사용되지 않는다고 말해주십시오. 만약 당신이 최악의 경우, ID 생성은 반드시 데이터베이스에 위임되어야합니다.