Equality Defined Collections

This package contains the collection classes Iterable, List, Set and Map which have a redefined equality such that two collections are considered equal based on their contents, and not whether they refer to the same instance of the collection.

Both the properties operator == and hashCode have been overriden in these classes.

The classes present in the library are EqualityDefinedIterable, EqualityDefinedList, EqualityDefinedSet and EqualityDefinedMap. All these classes will take in a collection and give them the same properties.

Getting Started

To import this package, include the following code:

import 'package:equality_defined_collections/equality_defined_collections.dart';

Normal collections vs Equality Defined Collections

Let's say we have the following three lists

final list1 = [1, 3, 5];
final list2 = [2, 0, 4];
final list3 = [1, 3, 5];

Even though the lists list1 and list3 have the same elements, list1 == list3 will return false because the two list are different instances. Using equality defined collections, we have

final eqList1 = EqualityDefinedList([1, 3, 5]);
final eqList2 = EqualityDefinedList([2, 0, 4]);
final eqList3 = EqualityDefinedList([1, 3, 5]);

Then, eqList1 == eqList3 will return true, while eqList1 == eqList2 will return false.

Although it is not that difficult to create a function/method that checks whether two lists have the same elements, using an equality defined list has an advantage when used in collections that recognise uniqueness- a Set, or the keys of a Map.

For example, let's say we have 2 maps map and eqMap, as defined below:

final map = {
    list1: 'odd',
    list2: 'even'

final eqMap = {
    eqList1: 'odd',
    eqList2: 'even'

Then, map[list3] will return null, but eqMap[list3] will return odd.

Types of equality

By default, the equality used to compare the contents is DefaultEquality from the collection package, which checks whether two elements within the collection are equal by equating them, using operator == and changing the hashCode alongside.

Another possible equality is the IdentityEquality, which checks whether two elements are the same instance of an object, using the identical function.