хеш-таблица сортировки Java со значением объекта по строковому параметру objecs - PullRequest
1 голос
/ 25 мая 2011

У меня есть hashable, который содержит строковый ключ и значение объекта класса:

Hashtable<String,myclass>m_class_table = new Hashtable<String,myclass>();

внутри 'myclass' У меня есть значение поля String,

Мне нужно отсортировать мою хеш-таблицу по этому строковому значению.

Я не могу просто отсортировать его по значениям хеш-таблицы, потому что это объект ..

Как это можно сделать?

Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Мне нужно отсортировать мою хеш-таблицу по этому строковому значению.

Хеш-таблица не является структурой отсортированных данных.*

Вы можете использовать некоторые SortedMap, такие как TreeMap, но эти структуры данных сортируют по ключам, так что это будет работать, только если ключ равен строкеполе указанного объекта.

Я не могу просто отсортировать его по значениям хеш-таблицы, потому что это объект ..

Вам необходимо предоставить Comparator<myclass> или позволить myclass реализовать интерфейс Comparable.

В зависимости от того, как вы выполняете итерацию по хеш-таблице, вы можете сделать такэто:

List<myclass> myObjects = new ArrayList<myclass>(m_class_table.values());
Collections.sort(myObjects, new Comparator<myclass>() {
    @Override
    public int compare(myclass o1, myclass o2) {
        o1.stringField.compareTo(o2.stringField);
    }
});

и затем переберите список myObjects.(Элементы в List упорядочены.)

1 голос
/ 25 мая 2011

Небольшое отклонение от ответа aioobe: я бы создал список записей на карте и отсортировал бы этот список.Таким образом, у вас все еще есть доступ к полным записям карты.

Map<String, MyClass> map = new HashMap<String, MyClass>();
// add some entries

List<Entry<String,MyClass>> entryList = 
     new ArrayList<Entry<String,MyClass>>(map.entrySet());
Collections.sort(entryList, new Comparator<Entry<String,MyClass>>() {
    public int compare(
        Entry<String, MyClass> first, Entry<String, MyClass> second) {
            return first.getValue().getFoo()
                        .compareTo(second.getValue().getFoo());
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...