3

我正在尝试为 DS 中的每个请求生成一个唯一的 ID。我正在考虑连接一个随机整数和请求接收的时间戳。因为,获得一个随机整数可能会导致负值,所以我决定打印十六进制表示:

     String randomPrefix = Integer.toHexString(RANDOM.nextInt()).toUpperCase();
     java.util.Date date = new java.util.Date();
     String timestamp = Long.toHexString(date.getTime()).toUpperCase();
     String id = randomPrefix.concat(timestamp);    

我不太擅长概率,但我想知道是否有其他操作可能导致字符串长度较短的这个值同样低(甚至更好的机会看不到重复)。

像外行人一样说话,串联应该 X 重复的机会,而加法会 + 它(重复的机会更高)。

请提出其他方法来生成更清晰和更短的 ID(或确认这是否正确)。

PS:请原谅我的外行语言,正在努力。:(

4

1 回答 1

5

尝试使用UUID

System.out.println(UUID.randomUUID().toString());

打印类似:

3aae7d1a-8799-4a6f-8863-cde6b1782e7b

使用 if for 是一种常见的做法ids

但是为什么你需要短随机 id?您应该了解,使用短 id 有更多机会获得重复,并且ID通常用于程序而不是人。

于 2013-07-29T22:06:19.780 回答