Tôi cần viết một chuỗi tạo chuỗi ngẫu nhiên tạo chuỗi 7char từ bộ ký tự 31-char và một số chữ cái (10 + 26-5, 5 nguyên âm bị bỏ qua). toán học đơn giản cung cấp cho một tập hợp của 31^7 kết hợp có thể ~ 27,5 tỷ đồng. tôi có câu hỏi liên quan đến nghịch lý bday, tôi chạy một số thử nghiệm và số lượng các bản sao tăng theo cấp số nhân. tôi có thể làm gì để tránh điều này không?Tạo chuỗi ngẫu nhiên java và nghịch lý sinh nhật
At 1 million, duplicates encountered till now = 19
At 2 million, duplicates encountered till now = 69
At 3 million, duplicates encountered till now = 157
At 4 million, duplicates encountered till now = 280
At 5 million, duplicates encountered till now = 470
At 6 million, duplicates encountered till now = 662
At 7 million, duplicates encountered till now = 896
At 8 million, duplicates encountered till now = 1185
At 9 million, duplicates encountered till now = 1500
At 10 million, duplicates encountered till now = 1823
At 11 million, duplicates encountered till now = 2204
At 12 million, duplicates encountered till now = 2584
At 13 million, duplicates encountered till now = 3020
At 14 million, duplicates encountered till now = 3527
At 15 million, duplicates encountered till now = 4110
At 16 million, duplicates encountered till now = 4683
At 17 million, duplicates encountered till now = 5284
At 18 million, duplicates encountered till now = 5919
At 19 million, duplicates encountered till now = 6611
At 20 million, duplicates encountered till now = 7343
At 21 million, duplicates encountered till now = 8095
At 22 million, duplicates encountered till now = 8858
At 23 million, duplicates encountered till now = 9707
At 24 million, duplicates encountered till now = 10547
At 25 million, duplicates encountered till now = 11452
At 26 million, duplicates encountered till now = 12399
At 27 million, duplicates encountered till now = 13356
At 28 million, duplicates encountered till now = 14393
At 29 million, duplicates encountered till now = 15369
At 30 million, duplicates encountered till now = 16436
Dưới đây là các lớp thử nghiệm:
import java.util.Set;
import org.apache.commons.lang3.RandomStringUtils;
import com.google.common.collect.Sets;
public class RandomUnivmylocaL {
public static void main(String[] argv) {
final int million = 1_000_000;
final int iterations = 30;
// 31 chars
final char[] charArr = new char[] { '1', '2', '3', '4', '5', '6', '7',
'8', '9', '0', 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L',
'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z' };
// System.out.println(charArr.length);
final Set<String> set = Sets.newHashSetWithExpectedSize(
iterations * million);
for (int i = 0; i < iterations; i++) {
for (int j = 0; j < million; j++) {
final String univCode = RandomStringUtils.random(7, charArr);
set.add(univCode);
}
System.out.println("At " + (i + 1) + " million, " +
"duplicates encountered till now = " +
(((i + 1) * million) - set.size()));
}
System.out.println("done");
}
}