Статический метод hashAllUnordered
- @Since("2.14")
Создаёт объединённый хеш-код для коллекции объектов.
Хеш-код вычисляется для элементов в objects, даже если они null, путём независимого от порядка числового объединения Object.hashCode каждого элемента.
Результат hashAllUnordered({o}) не является o.hashCode.
Пример:
bool setEquals<T>(Set<T> set1, Set<T> set2) {
var hashCode1 = Object.hashAllUnordered(set1);
var hashCode2 = Object.hashAllUnordered(set2);
if (hashCode1 != hashCode2) return false;
// Compare elements ...
} Вычисленное значение будет согласованным при повторном вызове функции с объектами, имеющими одинаковые хеш-коды в ходе выполнения одной программы, даже если объекты не обязательно находятся в том же порядке,
Хеш-значение, созданное этой функцией, не гарантированно будет стабильным при разных запусках одной и той же программы. Используемый алгоритм может различаться на разных платформах или в разных версиях библиотек платформы, а также может зависеть от значений, меняющихся при каждом выполнении программы.
Реализация
@Since("2.14")
static int hashAllUnordered(Iterable<Object?> objects) {
int sum = 0;
int count = 0;
const int mask = 0x3FFFFFFF;
for (var object in objects) {
int objectHash = SystemHash.smear(object.hashCode);
sum = (sum + objectHash) & mask;
count += 1;
}
return SystemHash.hash2(sum, count);
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-core/Object/hashAllUnordered.html