我正在研究一个将电子表格中的聚会(又名客户端)数据读入两个hashmaps的小项目。一个人跟踪每一方的价值是对象党,另一个嵌入在党对象中,以跟踪每一方的数据。事情是,我这样做的方式是有两个for循环,我们都知道它是一个O(N^2)算法。现在的方式是大约500行(或500方),大约65列(或65个标签/值),因此在这些元素的数量,这不是什么大不了的事情。但是,我被告知它可能需要处理超过2500万行,在这种情况下,O(N^2)是一个问题(不是技术上O(N^2)与列我猜,但列的数量可能扩大它不一定设置在65)。长话短说,我需要关于如何减少运行时间的提示,但我无法真正想到任何其他方式来访问工作表中的每个单元格。用于从Java Excel电子表格读取数据的高效算法
下面是相关代码:
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和哈希表有什么区别?他们似乎一样的东西
我不确定说算法是否是O(N^2)是正确的。这里N是单元的数量,所以这是O(N)。 – Raedwald
Excel中的行限制在百万范围内(http://answers.microsoft.com/zh-cn/office/forum/office_2010-excel/how-many-rows-in-excel-2010-64bit-version-runnin/25076632-ba6f-4454-a386-fc3c92d71ee6)再加上我认为Raedwald对此是正确的,所以这里没有问题。 –
现在我觉得很尴尬,你完全正确 – sreya