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

Java集中对象的可变字段

司空赞
2023-03-14
问题内容

我在假设,如果你有一个包含一个Java集<>内(或在地图<>对于这个问题的关键)的对象,所使用的任何字段,以确定身份或关系(通过纠正hashCode()equals()compareTo()等。)无法更改而不会导致对集合的操作未指定的行为?(编辑:正如在其他问题中提到的)

(换句话说,这些字段应该是不可变的,或者您应该要求从集合中删除对象,然后进行更改,然后重新插入。)

我问的原因是我正在阅读《Hibernate
Annotations参考指南》
,并且有一个示例,其中有一个,HashSet<Toy>但是Toy该类具有字段name并且serial是可变的,并且也在hashCode()计算中使用…在我的脑海中闪过一个红旗。我只是想确保我了解它的含义。


问题答案:

的javadoc Set

注意:如果将可变对象用作集合元素,则必须格外小心。如果对象的值以影响相等比较的方式更改,而对象是集合中的元素,则不指定集合的​​行为。此禁止的一种特殊情况是,不允许集合将自身包含为元素

这只是意味着您可以在集合中使用可变对象,甚至可以更改它们。您只应确保所做的更改不会影响Set查找项目的方式。为此HashSet,这将不需要更改用于计算的字段hashCode()



 类似资料:
  • 问题内容: 我正在学习《 Java SE 7程序员I和II学习指南》,但我不理解下面的解释。 哪几行代码破坏了封装?答案:第9行。“封装诸如ArrayList之类的可变对象时,您的getter必须返回对该对象副本的引用,而不仅仅是对原始对象的引用”。 我既不理解解释,也不了解如何修改原始代码。 所以在getList()而不是 我们应该这样做吗? 问题答案: 您将替换为: 与: 否则客户可以做… 破

  • 问题内容: Java中不变对象的优点显而易见: 一致状态 自动线程安全 简单 您可以通过使用私有final字段和构造函数注入来支持不变性。 但是,在Java中偏爱不可变对象有哪些弊端? 即 与ORM或Web演示工具不兼容? 不灵活的设计? 实施的复杂性? 是否可以设计一个主要使用不可变对象的大规模系统(深层对象图)? 问题答案: 但是,在Java中偏爱不可变对象有哪些弊端?与ORM或Web演示工具

  • 本文向大家介绍浅谈Python中的可变对象和不可变对象,包括了浅谈Python中的可变对象和不可变对象的使用技巧和注意事项,需要的朋友参考一下 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的内存中的值可以被改变。变量(准确

  • 问题内容: 我正在努力使可变对象与不可变对象有关。使用可变对象会带来很多负面影响(例如,从方法中返回字符串数组),但是我很难理解它的负面影响。使用可变对象的最佳实践是什么?您是否应尽可能避免使用它们? 问题答案: 好吧,这有几个方面。 没有参考身份的可变对象会在奇数时间导致错误。例如,考虑使用基于值的方法的 : 当实例用作键时,实例在映射中“丢失”,因为实例和相等性基于可变值。这些值在映射之外更改

  • 我的目标是让Java对象不可变。我有一个班级< code >学生。为了实现不变性,我用以下方式对它进行了编码: 我的问题是,实现班级不变性的最佳方法是什么?

  • 问题内容: 我正在自学Java,这本书中的其中一项复习练习要求“对象”和“对象变量”之间的区别。 我知道什么是对象(类的特定实例),但是我似乎无法在书中的任何地方(无答案部分)或在互联网上找到术语“对象变量”。 有人知道这个名词的意思吗? 问题答案: 它是“实例变量”的同义词: 显然,该术语并不常用,最好坚持使用“实例变量”以避免任何潜在的歧义。