我正在尝试为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更简洁,更短(或确认是否正确)。

附注:请原谅我使用外行语言,请继续努力。 :(

最佳答案

尝试使用UUID

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

打印类似:
3aae7d1a-8799-4a6f-8863-cde6b1782e7b

通常将if用于ids
但是,为什么需要短随机ID?您应该了解,使用短ID可以获得重复的机会更多,而且ID通常是程序而非人的字段。

08-07 17:10