Sup*_*tux 162 java uniqueidentifier
我正在寻找在Java中创建一个唯一ID作为String的最佳方法.
任何指导表示赞赏,谢谢.
我应该提到我正在使用Java 5.
ape*_*ins 333
创建一个UUID.
String uniqueID = UUID.randomUUID().toString();
Run Code Online (Sandbox Code Playgroud)
Mic*_*rdt 47
如果您需要简短的,人类可读的ID,并且每个JVM运行只需要它们是唯一的:
private static long idCounter = 0;
public static synchronized String createID()
{
return String.valueOf(idCounter++);
}
Run Code Online (Sandbox Code Playgroud)
编辑:评论中建议的替代方案 - 这依赖于线程安全的底层"魔力",但更具可扩展性,同样安全:
private static AtomicLong idCounter = new AtomicLong();
public static String createID()
{
return String.valueOf(idCounter.getAndIncrement());
}
Run Code Online (Sandbox Code Playgroud)
Ada*_*ski 19
这是我的两分钱:我以前实现了一个IdFactory以[主机名] - [应用程序开始时间] - [当前时间] - [鉴别器]格式创建ID 的类.这在很大程度上保证了ID在JVM实例中是唯一的,同时保持ID可读(尽管很长).这是代码,以防任何用途:
public class IdFactoryImpl implements IdFactory {
private final String hostName;
private final long creationTimeMillis;
private long lastTimeMillis;
private long discriminator;
public IdFactoryImpl() throws UnknownHostException {
this.hostName = InetAddress.getLocalHost().getHostAddress();
this.creationTimeMillis = System.currentTimeMillis();
this.lastTimeMillis = creationTimeMillis;
}
public synchronized Serializable createId() {
String id;
long now = System.currentTimeMillis();
if (now == lastTimeMillis) {
++discriminator;
} else {
discriminator = 0;
}
// creationTimeMillis used to prevent multiple instances of the JVM
// running on the same host returning clashing IDs.
// The only way a clash could occur is if the applications started at
// exactly the same time.
id = String.format("%s-%d-%d-%d", hostName, creationTimeMillis, now, discriminator);
lastTimeMillis = now;
return id;
}
public static void main(String[] args) throws UnknownHostException {
IdFactory fact = new IdFactoryImpl();
for (int i=0; i<1000; ++i) {
System.err.println(fact.createId());
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
这为UUID生成添加了更多随机性,但确保每个生成的id具有相同的长度
import org.apache.commons.codec.digest.DigestUtils;
import java.util.UUID;
public String createSalt() {
String ts = String.valueOf(System.currentTimeMillis());
String rand = UUID.randomUUID().toString();
return DigestUtils.sha1Hex(ts + rand);
}
Run Code Online (Sandbox Code Playgroud)
恕我直言aperkins提供了一个优雅的解决方案原因是本机和使用较少的代码.但是如果你需要一个较短的ID,你可以使用这种方法来减少生成的String长度:
// usage: GenerateShortUUID.next();
import java.util.UUID;
public class GenerateShortUUID() {
private GenerateShortUUID() { } // singleton
public static String next() {
UUID u = UUID.randomUUID();
return toIDString(u.getMostSignificantBits()) + toIDString(u.getLeastSignificantBits());
}
private static String toIDString(long i) {
char[] buf = new char[32];
int z = 64; // 1 << 6;
int cp = 32;
long b = z - 1;
do {
buf[--cp] = DIGITS66[(int)(i & b)];
i >>>= 6;
} while (i != 0);
return new String(buf, cp, (32-cp));
}
// array de 64+2 digitos
private final static char[] DIGITS66 = {
'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'-','.','_','~'
};
}
Run Code Online (Sandbox Code Playgroud)
Java - 生成唯一ID
UUID是在Java中生成唯一ID的最快速,最简单的方法.
import java.util.UUID;
public class UniqueIDTest {
public static void main(String[] args) {
UUID uniqueKey = UUID.randomUUID();
System.out.println (uniqueKey);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我们可以使用 java 中的onUUID方法来创建一个唯一的 ID 。randomUUID()UUID
String uniqueID = UUID.randomUUID().toString();
Run Code Online (Sandbox Code Playgroud)
uniqueID这将生成返回类型为 的随机数String。
| 归档时间: |
|
| 查看次数: |
279174 次 |
| 最近记录: |