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

为什么C#不为集合实现GetHashCode?

郎献
2023-03-14
问题内容

我正在将某些东西从Java移植到C#。在Java中hashcode,a ArrayList取决于其中的项目。在C#中,我总是从List
获取相同的哈希码。

为什么是这样?

对于我的某些对象,哈希码必须有所不同,因为其list属性中的对象使对象不相等。我希望哈希码对于对象的状态始终是唯一的,并且仅在对象相等时才等于另一个哈希码。我错了吗?


问题答案:

为了正常工作,散列码必须是不可变-一个对象的散列码必须 永远不会 改变。

如果对象的哈希码确实发生变化,则包含该对象的所有词典将停止工作。

由于集合不是一成不变的,因此无法实现GetHashCode
相反,它们继承了default GetHashCode,它为对象的每个实例返回(希望)唯一的值。(通常基于内存地址)



 类似资料:
  • 考虑下面的API方法,它取自Shiro的接口,但也可能存在于其他库中: 是的,即使是现在,仍然有库使用原始类型,可能是为了保持Java 1.5之前的兼容性?! 如果我现在想将此方法与流或选项一起使用,如下所示: 我收到一条关于未经检查的转换和使用原始类型的警告,我更喜欢使用参数化类型。 日食: 类型安全:收集(Collector)方法属于原始类型Stream javac: 注意:GenericsT

  • 我刚刚注意到,C#中的多维数组没有实现,而它实现了。对于单维数组,同时实现和。 为什么会有这种差别?如果多维数组是,那么它是否也应该实现泛型版本?我注意到这一点,是因为我试图在多维数组上使用扩展方法,除非您使用或类似的方法,否则会失败;所以我可以肯定地看到使多维数组实现的一个参数。 为了在代码中澄清我的问题,我希望下面的代码打印四次,而它实际打印的是、、、、和:

  • 问题内容: 你知道吗 : 将输出: 这是由于(继承自)未覆盖的事实引起的。 您知道为什么会这样吗? 问题答案: 根据的合同,没有针对s 的通用equals()方法,因此无法提供一个。 请注意,它既不是Set也不是List,因此既不是数量也不是它不支持的原因。

  • 问题内容: 有谁知道为什么 不执行?这意味着您无法对排序,这在我看来有点奇怪。 讨论后更新: 感谢所有有用的回复。最后,我对该主题进行了更多研究。 为什么java.lang.Number不实现Comparable的最简单解释源于可变性问题。 对于位的检讨,是抽象的超类型的,,,,,,,,和。在该列表中,并以没有实现。 深入研究,我发现在可变类型上实现不是一种好习惯,因为在比较期间或之后对象可能会更

  • 我现在想要一个数据结构,就像一个有索引的Deque。因此,它应该有O(1)在前面和后面添加和删除元素,以及O(1)基于索引访问元素。这并不难想象一个适合这种情况的设置。 ArrayDeque似乎是一个自然的选择。但是,ArrayDeque不实现List。由于底层数据结构是一个数组,是否有充分的理由不允许索引? 还有,更实用的是,有人知道有哪个图书馆在做我想做的事情吗。据我所知,Apache Com

  • C语言快慢链表判断链表是否有环 hasCycle函数while(slow != NULL && fast !=NULL)时会报错 那为什么写成while(slow != NULL && fast->next != NULL)就没问题啊,快慢指针不是当slow和fast相遇的时候,证明链表有环吗?当slow和fast都不为空时,slow向后移动一位,fast移动两位,当他们相遇的时候即链表有环,若s