고유 한 ID를 만들기 위해 비트를 오랫동안 조립하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/317617

  •  11-07-2019
  •  | 
  •  

문제

Java에서 비교적 고유 한 ID를 제공 할 유틸리티를 작성하고 싶습니다. 타임 스탬프 + y 비트의 x 비트와 같은 매우 간단한 것.

따라서 다음 방법을 어떻게 구현합니까?

long getUniqueID()
{
    long timestamp = System.currentTimeMillis();
    long random = some random long

    ...

    return id;
}

보너스

내 ID를 형성하는 데 사용할 수있는 다른 쉽게 얻을 수있는 정보에 대한 제안이 있습니까?

참고 : 나는 Guids를 알고 있으며 Java는 UUID 클래스를 가지고 있지만 길이가 128 비트 인 것을 원하지 않습니다.

도움이 되었습니까?

해결책

필요하지 않은 비트를 자르기 만하면됩니다.

return java.util.UUID.randomUUID().getLeastSignificantBits();

다른 팁

당신이하려는 것은 a를 만드는 것입니다 해시 기능 두 개의 긴 값을 단일 긴 값으로 결합합니다. 이 경우 일률 생성 된 고유 ID 값의 충돌은 용납 할 수 없기 때문에 해시 함수 중 가장 중요합니다. 그러나 해시 값을 이전에 생성 된 식별자와 비교할 수 있다면 충돌이 발생하지 않을 때까지 해시를 수정하여 충돌을 해결할 수 있습니다.

예를 들어 타임 스탬프를 가져 와서 수행 할 수 있습니다. 독점 또는 임의의 값을 가진 (Java에서 Caret ^ 연산자 사용). 충돌이 감지되면 결과에 하나를 추가하십시오.

동일한 JVM에서 독특한 경우 충분하다면 이와 같은 일이 작업을 수행해야합니다.

public class UniqueID {
  static long current= System.currentTimeMillis();
  static public synchronized long get(){
    return current++;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top