【发布时间】:2015-10-09 07:27:21
【问题描述】:
我正在尝试生成一个随机十六进制值列表(500000 以上)。我需要计算有多少唯一值,并且能够将十六进制复制并粘贴到文本文件中。但是,当我尝试从控制台复制值时,我会丢失字符串。例如,创建了 40000 个十六进制值,但控制台仅列出了大约 6000 个值。该程序适用于较小的数字,并且总是告诉我正确数量的唯一值。
public class HexGenerator {
private static String getRandomHexString(int numchars) {
Random r = new Random();
StringBuffer sb = new StringBuffer();
while (sb.length() < numchars) {
sb.append(Integer.toHexString(r.nextInt()));
}
return sb.toString().substring(0, numchars);
}
public static void main(String args[]) {
LinkedList < String > address = new LinkedList < String > ();
for (int x = 0; x < 40000; x++) {
String a = getRandomHexString(4);
System.out.println("7f1a9800" + a + " ");
if (!address.contains(a))
address.add(a);
}
System.out.println();
System.out.println(address.size());
}
}
如何在控制台中打印所有字符串?
【问题讨论】:
-
不要将它们打印到控制台:将程序的输出重定向到文件
command > output.txt。 -
顺便说一句,LinkedList 是检查重复项的一个糟糕的集合选择。包含操作是 O(n)。如果您不需要任何特定顺序的内容(例如,您只想检查包含),请使用 HashSet,它将 contains 实现为 O(1) 操作(如果您希望保留插入顺序,请使用 LinkedHashSet )。