你在想这个问题,这可以通过一个MySQL表格来完成,它将数据保存到磁盘而不是将所有内容都保存在内存中。那么多的数据从来都不是由独立应用程序有效处理的。
CREATE TABLE TONS_OF_STRINGS
(
unique_string varchar(255) NOT NULL,
UNIQUE (unique_string)
)
只是循环通过值(假设在这里逗号分隔列表)并尝试插入每个标记。每个失败的令牌都是重复的。
public static void main(args) {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/database","username","password");
FileReader file = new FileReader("SomeGiantFile.csv");
Scanner scan = new Scanner(file);
scan.useDelimiter(",");
String token;
while (scan.hasNext()) {
token = scan.next();
try {
PreparedStatement ps = con.prepareStatement("Insert into TONS_OF_STRING (UNIQUE_STRING) values (?)");
ps.setString(1, token);
ps.executeUpdate();
} catch (SQLException e) {
System.out.println("Found duplicate: " + token);
}
}
con.close();
System.out.println("Well that was easy, I'm all done!");
return 0;
}
不要忘了在完成时清除表格,这就是很多数据。
为什么不利用数据库的力量?它是否需要在java中严格执行? –
如果这是一个选项,“数据库”的想法是伟大的。此外,您需要考虑两个“最差情况”:a)每个字符串都是唯一的,b)每个字符串都是相同的。无论您提出哪种解决方案,您是否拥有磁盘/ RAM容量和时间/计算能力来处理这两种情况? – paulsm4
线数有多大?我知道比MAX_VALUE更大 - 大于32 * MAX_VALUE?大于...? –