Как отсортировать элементы в хеш-таблице в алфавитном порядке? - PullRequest
1 голос
/ 28 июля 2011

Как отсортировать элементы хеш-таблицы по алфавиту?Например, мои элементы:

cijfercode, Zweeds, Doorloper, Kruizword, Crypto, Woordzoker

edit : я также получил решение для сортировки элементов хеш-таблицы.Вот решение:

java.util.Vector vec = new java.util.Vector(hashtableList.keySet());
Collections.sort(vec);

Ответы [ 4 ]

9 голосов
/ 28 июля 2011

Если этими "элементами" являются ключи , вы можете хранить их в TreeMap, что приведет к последовательному порядку на основе естественного порядка ключей.Обратите внимание, что вам не нужно ничего делать, кроме как создать новую карту со старой картой, переданной конструктору:

Map<String,?> map = ?
Map<String,?> orderedMap = new TreeMap<String,?>(map);

Затем выполните итерацию как обычно:

for(String key : orderedMap.keys()){

}

Если ваш "элементы "являются значениями , затем вы можете вставить их в качестве ключей в TreeMap отслеживание исходных ключей, прочитать отсортированный порядок значений, как и раньше (в основном создавая инвертированный индекс):

Map<?,String> map = ?
Map<String,List<?>> orderedVals = new TreeMap<String,List<?>>();
for(Entry<?,String> map : map.entrySet()){
    List<?> keys = orderedVals.get(map.getValue());
    if(keys == null){
        keys = new ArrayList<?>();
        orderedVals.put(map.getValue(), keys);
    }
    keys.add(map.getKey());
}

// now orderedVals has keys in sorted order
for(String val : orderedVals.keys()){

}

Конечно, если вы на самом деле не используете ничего, связанного с тем фактом, что эти вещи находятся в «хеш-таблице» (я читал это как нечто, реализующее Map), то вы можете загрузить Listна ваш выбор и сортируйте его:

List<String> list = new ArrayList<String>(map.values()); // or use map.keys()
Collections.sort(list);

Если вас не устраивает стандартный порядок сортировки для String, не стесняйтесь написать свой собственный компаратор:

Collections.sort(list, new Comparator<String>(){
    public int compare(String left, String right){
        return // your impl
    }
});

compare должен возвращать отрицательное целое число, когда left стоит первым, 0, если left и right одинаковы, и положительное целое, если right стоит первым.

5 голосов
/ 28 июля 2011

Идея Марка Эллиота верна.Мне не нравится вся идея Map<?, List<?>>;Я был слишком избалован гуавой .Итак, вот версия той же идеи в Гуаве:

SortedSetMultimap<String, ?> sorted = Multimaps.invertFrom(
        Multimaps.forMap(map), TreeMultimap.create());
for (Map.Entry<String, ?> entry : sorted.entries()) {
    // ...
}

Это примерно треть размера кода Марка.: -)

3 голосов
/ 17 августа 2011
java.util.Vector vec =new java.util.Vector(hashtableList.keySet()); 
Collections.sort(vec);
0 голосов
/ 28 июля 2011

Пожалуйста, проверьте http://discuss.joelonsoftware.com/default.asp?joel.3.19588.13 для интересного обсуждения этого.

Рассмотрим http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeMap.html тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...