当前位置: 首页 > 面试题库 >

类对象与哈希映射

时宾实
2023-03-14
问题内容

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

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


问题答案:

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

  • 哈希映射比具有相同数量字段的类具有更大的内存占用量
  • 哈希图会强制对基元进行装箱
  • 哈希图的创建和访问速度较慢

可读性也会受到影响:当您的业务逻辑特定于具有固定数量字段的类时,显然会赢得一个特殊用途的类。当动态配置字段时,哈希表是您唯一的选择。您还可以采用混合设计,当一个对象在内部使用哈希图进行存储时,在外部显示命名良好的字段,并公开语义以在您使用时添加更多“字段”。

总而言之,在决定使用散列图以提高其灵活性之前,应确定是否真的需要设计中的所有灵活性。有时,答案是“是”,有时是“否”。没有“一刀切”的解决方案。



 类似资料:
  • 我想获取一个Javascript对象并将其转换为哈希数组。 以下操作仅获取对象的一个元素并将其转换为数组: 返回: 但是,当我试图创建散列元素来组成数组时,出现了一个错误: 返回: 我做错了什么?

  • 我正试图让我的头脑围绕着一个哈姆特的细节。我会用Java自己实现一个,只是为了理解。我熟悉尝试,我想我得到了HAMT的主要概念。 基本上, 两种类型的节点: null null 我不太明白的部分是碰撞检测和缓解。在链接的论文中,他暗示了这一点: 然后将现有键插入到新的子哈希表中,并添加新键。每使用5个以上的散列比特,冲突的概率就减少1/32倍。偶尔,可能会消耗整个32位哈希,必须计算一个新的哈希来

  • > 阅读算法书,需要掌握哈希表的概念。他们写了关于使用单独链接的散列和使用线性探测的散列。我猜Java的HashMap是一个哈希表,因此我想知道HashMaps使用什么机制(链接或探测)? 我需要实现最简单的HashMap与get,put,删除。你能给我指出好的材料来阅读吗? 当用于映射的惟一键是自定义对象时,我们需要在相应的类型中实现hashCode()函数。我做得对吗?或者什么时候需要hash

  • 用例是将对象数组转换为基于字符串或函数的哈希映射,所提供的字符串或函数用于求值并作为哈希映射中的键和作为对象本身的值。使用这种方法的一个常见情况是将对象数组转换为对象的哈希映射。 下面是JavaScript中的一个小片段,用于将对象数组转换为哈希映射,由Object的属性值索引。您可以提供一个函数来动态(运行时)评估哈希映射的键。希望这对将来的人有帮助。

  • 问题内容: 我需要一个Python / C / C ++ / Java实现,可以 暂停散列进步 和 商店 ,在这样一个文件进度的进展是 可恢复 从该文件在稍后阶段。 无论上面列出的是哪种语言编写的,它都应该可以在Python中正常工作。建议您提供它以便与“ hashlib”一起良好地工作,但这不是必需的。同样,如果已经存在这样的事物,那么到此的链接就足够了。 对于一个想法 ,您的实现应该实现什么。

  • 问题内容: 我了解为什么将可变对象放入字典很危险。但是,将所有列表/集合转换为元组/ frozensets是昂贵的;对于许多类型,根本没有容易获得的不可变版本。因此,有时值得直接散列可变对象,并采取适当的预防措施以确保所讨论的对象永远不会被修改。 在开始为可变对象实现非常复杂的自定义哈希函数之前,我想检查一下用作哈希函数是否存在任何缺点- 无论是在性能,碰撞还是其他方面。 问题答案: 出于类似的原