我正在做一个小项目,将电子表格中的一方(又名客户端)数据读取到两个哈希图中。一个跟踪每一方,其值为对象 Party,另一个嵌入在跟踪每一方数据的 Party 对象中。事情是,我这样做的方式是使用两个 for 循环,众所周知,这是一个 O(N^2) 算法。现在的方式是大约 500 行(或 500 个方)和大约 65 列(或 65 个标签/值),因此在元素数量上它并不是什么大问题。但是,我被告知它可能必须处理超过 2500 万行,在这种情况下 O(N^2) 是一个问题(我猜的列在技术上不是 O(N^2),但列数可以扩展它不一定设置为 65)。
长话短说,我需要有关如何减少运行时间的提示,但我真的想不出任何其他方法来访问工作表中的每个单元格。
以下是相关代码:
package storage;
import java.io.File;
import java.util.HashMap;
import jxl.Sheet;
import jxl.Workbook;
import pojo.Party;
public class PartyStructure {
private static HashMap<String, Party> map;
private static PartyStructure partyStructure;
private String inputFile = "C:/Users/joayers/Documents/API Project Information/Sample Data.xls";
File excelData = new File(inputFile);
private PartyStructure() throws Exception
{
map = new HashMap<String, Party>();
readData();
}
public static HashMap<String,Party> getPartyCollection() throws Exception
{
if(partyStructure==null)
{
partyStructure = new PartyStructure();
}
return map;
}
private void readData() throws Exception
{
Workbook w=Workbook.getWorkbook(excelData);
Sheet sheet = w.getSheet(0);
String party_name;
String labelName;
String dataField;
for(int i=1;i<sheet.getRows();i++)
{
party_name = sheet.getCell(2, i).getContents().toString();
//map is a Hashmap<String, Party>
map.put(party_name, new Party());
for(int j=0;j<sheet.getColumns();j++)
{
labelName = sheet.getCell(j, 0).getContents().toString();
dataField = sheet.getCell(j, i).getContents().toString();
Party party = map.get(party_name);
//getPartyInfo is a getter for a HashMap<String, String> that holds values associated with the keys (the labels in excel)
party.getPartyInfo().put(labelName, dataField);
}
}
}
}
另外,hashmap 和 hashtable 之间有什么区别吗?他们似乎是同一件事