您可以简单地执行push() 函数。这样做是为您的节点创建一个随机 ID。
databaseRef.push(); // You have created a node with a random id.
但是,如果你想创建一个带有数字 id 的节点,你可以使用一个函数来创建一个数值:
public static long generateRandom(int length) {
Random random = new Random();
char[] digits = new char[length];
digits[0] = (char) (random.nextInt(9) + '1');
for (int i = 1; i < length; i++) {
digits[i] = (char) (random.nextInt(10) + '0');
}
return Long.parseLong(new String(digits));
}
函数来自:12 Digit unique random number generation in Java
您传递一个长度,它会创建一个随机数值。你的理想长度是 5。然后你可以这样做:
long randomFiveDigitValue = generateRandom(5);
databaseRef.child(String.valueOf(randomFiveDigitValue)).setValue(your_object);
另一种选择是使用整数哈希码。它会减少散列冲突,但您也应该准备好像之前的函数一样处理它们。您可以从订单中获取标识符,例如日期,甚至是多种因素,然后执行以下操作:
//Replace all these variables with the respective value
String factors = "your_date" + "user_uid" + "product_name";
factors.hashCode(); //String date returns a integer hash value.
这是50000 随机生成的产品的hashCode() 冲突:
COLLISIONS BETWEEN: 2 Items
ITEM 1: DATE: 24-5-2019 08:09 PM + NAME: IPHONE + UID: 4J3IF93KSKK0295[L3
ITEM 2: DATE: 24-5-2019 09:08 PM + NAME: MARKER + UID: 534KKJI903[PCO4OP5
生成这些需要很长时间,我认为现在碰撞真的很少见。喜欢1 to 50000 ratio。我的算法可能有缺陷,但这样的碰撞仍然很低。