使用hashmap而不是使用对象类是否合适...... 使用Hashmap ....
Map<String, String> cellMap = new HashMap<String, String>();
int j = 0;
while (cellIter.hasNext())
{
HSSFCell myCell = (HSSFCell) cellIter.next();
cellMap.put(columnMap[j], myCell.toString());
j++;
}
使用对象类.....
ABC abc= new ABC();
abc.setA(myRow.getCell(0).toString());
abc.setB(myRow.getCell(1).toString());
abc.setC(myRow.getCell(2).toString());
请在应用程序运行状况,内存要求等方面告诉我......
答案 0 :(得分:31)
这很大程度上取决于您要实现的目标:为了灵活性,哈希映射更好。但灵活性是有代价的:哈希映射也比具有相同数量的强类型字段的类更大更慢。
对可读性也有影响:当业务逻辑特定于具有固定数量字段的类时,特殊目的类明显胜出;当动态配置字段时,哈希表是您唯一的选择。您还可以使用混合设计,当对象在内部使用哈希映射时,在外部提供名称很好的字段,并公开语义以添加更多“字段”。
总而言之,在您决定使用哈希映射来实现其灵活性之前,您应该决定是否确实需要设计中的所有灵活性。有时,答案是“是”,有时候是“不”;没有“一刀切”的解决方案。
答案 1 :(得分:5)
对象具有字段(数据)和方法(行为)。如果您的数据包含一组固定的单元格(A,B和C),那么一定要使用一个对象。
Java是一个OO对象,OO设计,封装等可以帮助您构建健壮,可维护和快速的程序。
当您必须关联可变数量的键和值时,Map非常有用。但它只是一个数据结构,并且不允许您封装其他行为。
例如,您的对象中可能有一个getAAndB()方法返回与B连接的A。或者您可能有方法来转换或查询字段。或者您可以将ABC实例传递给使用它们的其他对象。使用具有明确定义方法的对象ABD比使用Map<String, String>
容易得多。地图的关键是什么?他们的价值观是什么?它在哪里记录?如果您想更改钥匙怎么办?您将如何检测代码中使用这些密钥的所有位置?
答案 2 :(得分:4)
在演出之前,您应该将此视为“设计”问题。无需进行前期过早优化,有利于良好的设计。所以,问题是:“你是否需要通过中间人收集来填充你的域名对象ABC?”在大多数情况下我不会这样做,但很难说明确的是的或明确的否,而不知道更大的背景。
UPDATE: 30-40K:记录数与Object vs HashMap的比较无关,因为它们将在循环中处理(免责声明:在设计方面不相关而不是性能)。但是,电子表格中的列数很重要,因为这将直接反映为对象中的属性数。
如果这只是数据迁移或数据传输练习,那么我将使用HashMap方法。假设ABC将是一个没有行为的短暂的,一次性的数据容器对象,则不需要创建它。然后我会测试系统的性能,如果它不符合验收标准,那么我会对其进行分析并仅在必要时对其进行优化。