与顺序无关的哈希算法
我目前正在为我的自定义编程语言开发一个集合库。我已经有几种数据类型(集合,列表,地图,集)和它们的实现(可变和不可变),但到目前为止,我缺少的是和。虽然这些对于列表来说没有问题,因为它们是有序的集合,但它们对集合和映射起着特殊的作用。如果两个集合具有相同的大小和相同的元素,则认为它们相等,并且集合保持它们的顺序不应影响它们的相等性。由于 equals-hashCode-contract,实现还必须反映此行为,这意味着具有相同元素但排序不同的两个集合应具有相同的哈希代码。(这同样适用于地图,从技术上讲,地图是一组键值对)hashCode
equals
hashCode
示例(伪代码):
let set1: Set<String> = [ "a", "b", "c" ]
let set2: Set<String> = [ "b", "c", "a" ]
set1 == set2 // should return true
set1.hashCode == set2.hashCode // should also return true
我如何实现一个相当好的哈希算法,上面示例中的s返回相同的值?hashCode