文章目录
假设QQ号是int类型,那么最多可以有4294967295个,就是43亿左右,QQ号无论多少位,每个数字只占用4个字节(32位)。如果要存储43亿个QQ号,需要的内存空间为43亿乘以4Byte=172亿Byte,172亿字节 ÷ (1024 × 1024 × 1024) ≈ 16GB。这只是存储QQ号本身所需的内存空间,不包括其他数据结构和索引所需的额外空间。
一、公共方法
1、生成模拟QQ号
private static void QQGenerator(int qqCount) {
String[] qqs = new String[qqCount];
Random random = new Random();
for (int i = 0; i < qqCount; i++) {
int randomNumber = random.nextInt(Integer.MAX_VALUE);
qqs[i] = String.valueOf(randomNumber);
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter("G:\\qq.txt"))) {
for (String qq : qqs) {
writer.write(qq + System.lineSeparator());
}
} catch (IOException e) {
e.printStackTrace();
}
}
2、读取数据文件
private static List<String> loadData(String s) {
List<String> list = new ArrayList<String>();
try (BufferedReader reader = new BufferedReader(new FileReader("G:\\qq.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
list.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
3、测试方法
// 读取qq.txt里面的内容
List<String> list = loadData("G:\\qq.txt");
long statr = System.currentTimeMillis();
// qqDistinct为实际使用的方式
List<String> distinctQQList = qqDistinct(list);
System.out.println("去重后数量:" + distinctQQList.size());
System.out.println("执行耗时(单位ms):" + (System.currentTimeMillis() - statr