java - Java:包含A类的A类的哈希码,B类包含A
问题描述
在我的类中实现哈希码函数时遇到问题。如标题中所述,我有两个课程:
类 A 代表一个学校测试,因此它包含几个属性(即主题、分数和代表参加测试的学生的类的实例)。
你可以猜到,B 类代表学生。它有一些属性(即姓名、地址、年龄等)和一个包含多个 A 类实例的 ArrayList(学生可以参加许多测试)。
我的问题来了,我被要求在两个类中实现哈希码函数。我使用的哈希码是我教过的,它是添加每个属性的哈希码,乘以一个整数,具体取决于它的类型(即乘以 31 用于字符串,17 用于 int,13 用于对象等)。
但是如果我调用A类的hashcode,那么B类的hashcode就会被调用,然后它会回调A类的hashcode。
如何摆脱这个循环?我想摆脱测试类(B)中学生类(A)hashcode的hashcode调用。但是还有其他选择吗?这是我第一次尝试寻求帮助,我希望我没有让它难以理解。
解决方案
避免问题的一种方法是更改抽象。代表学校测试的类(“class A”)不必持有学生实例的引用(“class B”)。相反,它可以保存该学生的某些标识符(该学生的某些独特属性)。
另一种方式:我认为说学生不是由他们参加的测试来定义是有道理的。这意味着除了测试列表之外的所有属性都相等的两个学生实例指的是同一个学生。这意味着测试列表不应参与hashCode()
和equals()
方法。
推荐阅读
- php - API 平台资源的多个密钥标识符
- swift - SwiftUI [iPadOS]:为什么嵌入在工作表中的 TextField 在成为第一响应者时会产生布局约束冲突?
- angular - 在 Gradle 中重新映射 Java 资源的路径
- django - 如何在 django 中使用/添加贝宝而不是 razorpay
- angular - 在 ngoninit 上调用时如何避免多次调用服务
- android - RecyclerView 不想被初始化
- flyway - Flyway 7 中的 UTF-8 和 UTF-8 BOM 支持
- r - Display of various plots with shared x-axis in R
- python - pyenv no longer sets paths correctly when activating virtual environments
- python-3.x - 'DataFrame' objects are mutable, thus they cannot be hashed - Using in a Groupby