Связанная карта в Java, неравная, если порядок ключей другой - PullRequest
3 голосов
/ 03 марта 2020

Существует ли в Java или сторонних библиотеках Map, сохраняющая порядок вставки (аналогично LinkedHashMap), которая также проверяла бы порядок ключей при сравнении (методы equals() и hashCode())? Так что Map(a => 1, b => 2) будет отличаться от Map(b => 2, a => 1).

Аналогично приведенному ниже, но я не хочу изобретать и поддерживать колесо:

public class EqualityStrictLinkedMap<K, V> extends ForwardingMap<K, V>
{
    ...

    @Override
    public boolean equals(Object o)
    {
        if (!(o instanceof Map))
            return false;
        Map<K, V> that = (Map<K, V>) o;
        return Iterables.elementsEqual(entrySet(), that.entrySet());
    }

    @Override
    public int hashCode()
    {
        int h = 1;
        for (Map.Entry<K, V> entry: entrySet()) {
            h = (h*31 + Objects.hashCode(entry.getKey()))*31 + Objects.hashCode(entry.getValue());
        }
        return h;
    }
}
...