Существует ли в 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;
}
}