Я думаю, что вы выбрали неверную структуру данных.
HashMaps не упорядочены естественным образом.Ключи в наборе для HashMap имеют непредсказуемый порядок, который чувствителен к последовательности операций, которые заполняли карту.Это делает его непригодным для сравнения двух HashMaps.
Чтобы сравнить пару HashMaps, вам нужно извлечь соответствующие наборы ключей, отсортировать их и затем сравнить отсортированные наборы.Другими словами, метод compareTo
для HashSet
производных классов будет в среднем O(NlogN)
.
FWIW, реализация compareTo
будет выглядеть примерно так, при условии, чтоМетод состоит в том, чтобы упорядочить HashMaps на основе отсортированных списков ключей в их соответствующих наборах ключей.Очевидно, что существуют другие упорядочения, основанные на наборах ключей.
public int compareTo(MyMap<K, V> other) {
List<K> myKeys = new ArrayList<K>(this.keySet());
List<K> otherKeys = new ArrayList<K>(other.keySet());
Collections.sort(myKeys);
Collections.sort(otherKeys);
final int minSize = Math.min(myKeys.size(), otherKeys.size());
for (int i = 0; i < minSize; i++) {
int cmp = myKeys.get(i).compareTo(otherKeys.get(i));
if (cmp != 0) {
return cmp;
}
}
return (myKeys.size() - otherKeys.size());
}
Если на карте есть только одна пара ключ / значение, то вы должны заменить ее простым классом Pair<K,V>
,Использование HashMap
для представления одной пары - это безумие.