我尝试从对象的ArrayList生成哈希代码,该代码在多次执行时保持一致。我尝试执行ArrayList.hashCode()
,但每次执行都返回不同的值(因为它创建内存地址的哈希)。我还尝试了MD5
哈希,但无法将其转换为byteArray
。
我正在寻找一种可靠且一致的散列方法,而不是迭代地从ArrayList中提取字符串。
下面是数组列表的外观
[[[ObjectClass1, ObjectClass1], ObjectClass2]]
data class class1(
val a: String,
val b: String,
val c: Int,
val d: class3,
val e: Boolean
)
data class class3(val a: Set<String>)
enum class class2 { HI, BYE }
下面是我的代码:
class Hasher() {
companion object {
private lateinit var toBeHashed
override fun equals(other: Any?): Boolean {
return super.equals(other)
}
override fun hashCode(): Int {
// create hash here
toBeHashed.hashCode()
}
fun createHash(arrayList) {
toBeHashed = arrayList
val hash = hashCode()
return hash
}
}
}
Hasher.createHash(arrayList)
1条答案
按热度按时间pgky5nke1#
Enum.hashcode
是final的,所以没有枚举类可以覆盖它。如果你的实现以一种执行不一致的方式实现它,那么你对此无能为力。唯一的方法是编写自己的散列代码算法。例如,