hashAll 静态方法

  1. @Since("2.14")
int hashAll(
  1. Iterable<Object?> objects
)

为对象序列创建一个组合哈希码。

即使元素是 null,也会为 objects 中的元素计算哈希码,通过迭代顺序将每个元素的 Object.hashCode 进行数值组合。

调用 hashAll([o]) 的结果是不会等于 o.hashCode 的。

示例

class SomeObject {
  final List<String> path;
  SomeObject(this.path);
  bool operator ==(Object other) {
    if (other is SomeObject) {
      if (path.length != other.path.length) return false;
      for (int i = 0; i < path.length; i++) {
        if (path[i] != other.path[i]) return false;
      }
      return true;
    }
    return false;
  }

  int get hashCode => Object.hashAll(path);
}

当在单个程序执行期间再次使用具有相同哈希码的相同顺序的对象调用函数时,计算值将保持一致。

由该函数生成的哈希值在程序的不同运行间或不相同的程序隔离间运行时,无法保证 具有稳定性。精确算法可能在不同平台间或平台库的不同版本间不同,并且它可能依赖于程序每次运行时都会变化的值。

实现

@Since("2.14")
static int hashAll(Iterable<Object?> objects) {
  int hash = _hashSeed;
  for (var object in objects) {
    hash = SystemHash.combine(hash, object.hashCode);
  }
  return SystemHash.finish(hash);
}