我的程序是匹配 Craigslist 美国网站并从美国邮政编码文件为其分配邮政编码。首先,它读取包含美国邮政编码和相应城市的邮政编码文件。阅读每个条目后,它会检查 craigslist 网站的源代码以查找城市的匹配项。如果找到匹配项,程序会将该邮政编码分配给该 url,并将该 URL 和 zipcde 插入到 mySQL 数据库中。但一旦读取到大约 30,000 个邮政编码,程序就会出现很大的滞后。
我已经包含了比较邮政编码的代码,如果找到匹配项,则将其插入数据库:
String sql = "SELECT city, state FROM CRAIGSLIST";
ResultSet rs = con.createStatement().executeQuery(sql);
while(rs.next()) {
String state = rs.getString("state");
String city = rs.getString("city");
if((city.equalsIgnoreCase(cityInFile)) && (state.equalsIgnoreCase(stateInFie))){
sql = "UPDATE CRAIGSLIST "+ " SET zipcode = '"+ZipCode+"' WHERE city = '"+city+"'" ;
con.createStatement().executeUpdate(sql);
System.out.println("Found a match!");
break;
}
}
请有人帮忙。谢谢
最佳答案
您需要线性扫描 30k 条记录来查找单个匹配项。
创建一个哈希表映射,其中 cityInFile 是键,stateInFile 是值。然后循环遍历结果集,并根据哈希表检查每个城市。
为了找到匹配项,您需要花费 O(n^2) 的时间。如果您对文件进行哈希处理,您将把工作量减少到 O(n),因为您将在恒定时间内执行 n 次搜索。
if hashtable.get(cityInFile).equals(state)
//match found
您可以做的另一个解决方案是循环遍历您的文件并对每个 cityInFile 发出单独的查询以检查它是否存在,然后查看状态是否匹配。它只需要您在 SQL 语句中添加一个 where 子句。
关于java - 一旦读取大约 30,000 个邮政编码,程序就会出现滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551705/