使用hashmap而不是使用object类好吗......使用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++;
}并使用object类.....
ABC abc= new ABC();
abc.setA(myRow.getCell(0).toString());
abc.setB(myRow.getCell(1).toString());
abc.setC(myRow.getCell(2).toString());请在应用程序运行状况、内存需求等方面告诉我。
发布于 2012-04-21 18:30:33
这在很大程度上取决于您试图实现的目标:为了提高灵活性,散列映射更好。但是这种灵活性是有代价的: hash map也比具有相同数量的强类型字段的类更大、更慢。
与具有相同字段数的类相比,
映射上强制装箱创建和访问的速度较慢
这对可读性也有影响:当您的业务逻辑特定于具有固定字段数量的类时,一个特殊用途的类显然会胜出;当字段是动态配置时,哈希表是您唯一的选择。您还可以使用混合设计,当对象在内部使用散列映射进行存储时,在外部显示命名良好的字段,并公开语义以在执行过程中添加更多“字段”。
总而言之,在您决定使用哈希映射来实现其灵活性之前,您应该决定在设计中是否真的需要所有的灵活性。有时,答案是“是”,有时是“否”;没有“一刀切”的解决方案。
发布于 2012-04-21 18:31:16
对象有字段(数据)和方法(行为)。如果您的数据包含在一组固定的单元格(A、B和C)中,那么一定要使用对象。
Java是一个OO对象,OO设计、封装等都是为了帮助你构建健壮、可维护和快速的程序。
当您必须关联可变数量的键和值时,Map非常有用。但它只是一个数据结构,不允许您封装额外的行为。
例如,您的对象中可能有一个getAAndB()方法,它返回A和B的连接,或者您可能有转换或查询字段的方法。或者,您可以将ABC实例传递给使用它们的其他对象。使用具有定义良好的方法的对象ABD比使用Map<String, String>容易得多。地图的关键字是什么?他们的价值观是什么?它记录在哪里?如果您想要更改密钥怎么办?您将如何检测代码中使用这些键的所有位置?
发布于 2012-04-21 18:29:53
在执行之前,你应该把这看作是一个“设计”问题。不需要为了好的设计而提前进行优化。所以,问题是:“你需要通过一个中间集合来填充域对象ABC吗?”在大多数情况下我不会这么做,但是在不知道更大的上下文的情况下很难说出一个确定的或一个确定的no。
更新: 30-40K:记录的数量与Object与HashMap的比较无关,因为它们将在循环中处理(免责声明:在设计方面不相关,而不是在性能方面)。但是,电子表格中的列数很重要,因为这将直接反映为对象中的属性数。
如果这只是一个数据迁移或数据传输练习,那么我会使用HashMap方法。假设ABC将是一个没有行为的短暂的、一次性的数据容器对象,那么就没有必要创建它。然后,我将测试系统的性能,如果它不满足验收标准,那么我将分析它并仅在必要时对其进行优化。
https://stackoverflow.com/questions/10258071
复制相似问题