生成700万个不重叠的随机字符串

-1 java string random algorithm

我试图生成不重叠的700万个随机字符串(字符串长度必须为2到4)

但是,我的代码花了28023毫秒来生成700万个不重叠的字符串。

我不知道如何有效地生成700万个没有重叠的字符串。

我尝试使用哈希表,列表...,因为我需要键值类型

    HashMap<String, Integer> map = new HashMap();
    long start = System.currentTimeMillis();

    for(int i = 0 ; i < 7000000 ; ) {
        int MAX_LENGTH = 4;
        int MIN_LENGTH = 2;

        StringBuffer temp = new StringBuffer();
        Random rnd = new Random();
        int length = rnd.nextInt(MAX_LENGTH - MIN_LENGTH + 1) + MIN_LENGTH; // ??? ?? ??(2~4??)

        for (int j = 0; j < length; j++) {
            int rIndex = rnd.nextInt(2);
            switch (rIndex) {
                case 0:
                    // a-z(???)
                    temp.append((char) ((int) (rnd.nextInt(26)) + 97));
                    break;
                case 1:
                    // A-Z(???)
                    temp.append((char) ((int) (rnd.nextInt(26)) + 65));
                    break;
            }
        }


        String str = temp.toString();

        if(!map.containsKey(str)) {
            map.put(str, rnd.nextInt());
            i++;
        }
    }

    long end = System.currentTimeMillis();

    System.out.println("Setup Performance : " + (end - start));
Run Code Online (Sandbox Code Playgroud)

我的代码花了28023毫秒来生成700万个不重叠的字符串。

Jim*_*hel 5

因此,您要从一组52个字符(A-Za-z)中生成700万个字符串,每个字符串包含2到4个字符。

一些简单的数学告诉我们,有2,704个可能的2个字符的字符串,140,608个3个字符的字符串和7,311,616个可能的4个字符的字符串。总共有7,454,928个可能的字符串。

因此,创建一个包含从0到7,454,927的所有数字的数组。随机播放,然后从阵列中选择前700万个。

当然,您必须编写代码,将该数字转换为您的输出字符串之一。那很容易。0是“ AA”,51是“ Az”,52是“ BA”。您基本上是在进行整数到字符串的转换。

这是基本思想。您必须转换为Java。

arraySize = 7454928
numbers = new array[arraySize]

// populate array
for i = 0 to arraySize-1
    numbers[i] = i

shuffle(numbers)

for i = 0 to 7000000
    code = convertNumberToString(numbers[i])
    print code


convertNumberToString(n)
    Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    outputString = ""
    while (n > 0 || outputString.length < 2)
      result = n / 52 // length of alphabet
      remainder = n % 52;
      outputString.append(Alphabet[remainder])
      n = result;
    // outputString now contains the characters,
    // but they're reversed. So reverse the string.
    return outputString.reverse()
Run Code Online (Sandbox Code Playgroud)

  • 您不需要在末尾反转字符串。我们正在生成随机字符串,谁关心字符串的顺序是什么? (2认同)