繁体   English   中英

类对象与Hashmap

[英]Class Object vs Hashmap

使用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());

请在应用程序运行状况,内存要求等方面告诉我......

这很大程度上取决于您要实现的目标:为了灵活性,哈希映射更好。 但灵活性是有代价的:哈希映射也比具有相同数量的强类型字段的类更大更慢。

  • 散列映射具有比具有相同字段数的类更大的内存占用
  • 哈希地图强制拳击基元
  • 哈希映射创建和访问速度较慢

对可读性也有影响:当业务逻辑特定于具有固定数量字段的类时,特殊目的类明显胜出; 当动态配置字段时,哈希表是您唯一的选择。 您还可以使用混合设计,当对象在内部使用哈希映射时,在外部提供名称很好的字段,并公开语义以添加更多“字段”。

总而言之,在您决定使用哈希映射来实现其灵活性之前,您应该确定您是否真的需要设计中的所有灵活性。 有时,答案是“是”,有时候是“不”; 没有“一刀切”的解决方案。

对象具有字段(数据)和方法(行为)。 如果您的数据包含一组固定的单元格(A,B和C),那么一定要使用一个对象。

Java是一个OO对象,OO设计,封装等可以帮助您构建健壮,可维护和快速的程序。

必须关联可变数量的键和值时,Map非常有用。 但它只是一个数据结构,并不允许您封装其他行为。

例如,您的对象中可能有一个getAAndB()方法,它返回与B连接的A。或者您可能有方法来转换或查询字段。 或者您可以将ABC实例传递给使用它们的其他对象。 使用具有明确定义的方法的对象ABD比使用Map<String, String>容易得多。 地图的关键是什么? 他们的价值观是什么? 它在哪里记录? 如果您想更改钥匙怎么办? 如何检测代码中使用这些密钥的所有位置?

在演出之前,您应该将此视为“设计”问题。 无需进行前期过早优化,有利于良好的设计。 所以,问题是: “你是否需要通过中间集合来填充你的域名对象ABC?” 在大多数情况下,我不会做它,但它很难说一个明确的肯定或明确没有不知道的大背景。

更新: 30-40K:记录数与Object vs HashMap比较无关,因为它们将在循环中处理(免责声明:在设计方面与性能无关)。 但是,电子表格中的列数很重要,因为它将直接反映为对象中的属性数。

如果这只是一个数据迁移数据传输练习,那么我将采用HashMap方法。 假设ABC将是一个没有行为的短暂的,一次性的数据容器对象,则不需要创建它。 然后我会测试系统的性能,如果它不符合验收标准,那么我会对其进行分析并仅在必要时对其进行优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM