Структура данных HashMap используется для обеспечения доступа к ее элементам в O (1) раз.
Потому что это контейнер данных, его пул или ключи могут меняться во времени. Это означает, что вы не можете заверить в длинном термине порядок для списка карт.
В вашем примере вы сопоставляете две строки и создаете пару данных, называемую SimpleBindings
.
В случае вашего простого примера вы не должны использовать структуру данных Map<String,String>
для представления данных Pair
.
Если вы SimpleBindings действительно состоит из двух строки, все, что вы должны сделать, это реализовать только Comparable в классе SimpleBindings так:
class SimpleBinding implements Comparable<SimpleBinding> {
private final String key;
private final String value;
public SimpleBinding(String key, String value) {
Objects.nonNull(key);
Objects.nonNull(value);
this.key = key;
this.value = value;
}
@Override
public int compareTo(SimpleBinding that) {
return this.key.compareTo(that.key);
}
}
И вы просто использовать Collections.sort(bindings)
иметь отсортированный результат.
В случае, если вы не имеете доступ к классу, вы должны использовать интерфейс Comparator как этого
enum SimpleBindingComparator implements Comparator<SimpleBinding> {
DEFUALT {
@Override
public int compare(SimpleBinding fist, SimpleBinding second) {
return fist.key.compareTo(second.key);
}
};
Тогда вы сортировать привязки, как этот Collections.sort(bindings ,SimpleBindingComparator.DEFAULT);
Но если ваш случай является более сложным, чем это и в вашем магазине Карта в списке вы должны определить логику, представляющую заказ. В вашем случае может быть грустно, что заказ должен поддерживаться c1.getName()
Один из вариантов заключается в том, что вы не должны создавать список, а карту списка Map<String>,List<String>>
Это так называемая многокамерная карта, где один ключ соответствует нескольким значениям. См MultiMap из гуавы, и если вы хотите, чтобы быть отсортированы, то я предлагаю, чтобы прочитать о TreeMultiMap
Как это отличается? Вы пытались написать Компаратор, как предлагаемые ответы? Что вы пробовали? – forgivenson
Что вы точно сортируете? У вас есть «Список» (коллекция) «Карта» (другая коллекция). Как вы определяете, больше ли одна «Карта» больше другой? Кроме того, вы добавляете 'SimpleBindings' не' Map' - если этот класс 'extends Map' считает _not_ тем, что лучше всего избегать расширения элементов в структуре коллекций Java. –
Итак, ваша 'Карта' всего одна пара ключей по каждому из них? Почему бы просто не использовать «TreeMap» для всего этого? –
Mena