Сортировка HashTable по значениям (включая буквенно-цифровые) - PullRequest
0 голосов
/ 12 мая 2011

У меня есть HashTable с буквенно-цифровыми значениями.Я хочу отсортировать их.
Как мне этого добиться?

Ответы [ 4 ]

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

HashTable не сохраняет заказ.

Так что лучше Создайте List из него и сортируйте его.

Вам нужно обернуть ваши типы в класс, а затем реализовать Comparator, который сравнивает все типы значений (в вашем термине),

class Foo implements Comparator<Foo>{
  private int no;
  private String alpha;
  //+getter/setters

  public int compare(Foo f1, Foo f2){
      //put your logic here
  }
}
0 голосов
/ 12 мая 2011

Первый вопрос - вы действительно имеете в виду сортировку значений или же вы сортируете ключи?

Если вы хотите получить доступ к отсортированным значениям только по порядку, лучше всего создать список или массив, а затем отсортировать.

Для значений: Arrays.sort(table.values().toArray()) или Collections.sort(new ArrayList(table.values()))

Для ключей: Arrays.sort(table.keySet().toArray()) или Collections.sort(new ArrayList(table.keySet()))

Подробнее об этих методах сортировки: Arrays.sort () или Collections.sort () .

Если вы хотите использовать несколько раз на основе отсортированных ключей, вам лучше использовать TreeMap .

Если вы неоднократно хотите получить доступ на основе отсортированных значений (а не ключей), то вы всегда можете вставить по порядку в LinkedHashMap , который сохранит порядок.

0 голосов
/ 12 мая 2011

Если вы не хотите создавать новый класс для хранения отношения ключ / значение, и если вы не заинтересованы в TreeMap, то будет работать что-то вроде следующего:

ArrayList<Entry<String,String>> list = new ArrayList<Entry<String,String>>();
list.addAll(map.entrySet());

Collections.sort(list, new Comparator<Entry<String,String>>() {

    @Override
    public int compare(Entry<String, String> o1, Entry<String, String> o2) {
        //your logic here;
    }

});
0 голосов
/ 12 мая 2011

Почему? Предположительно вы выбрали HashTable вместо TreeMap, потому что он имел лучшую производительность (и не упорядочивал). Если вам не нужна производительность, и вы хотите упорядочить, используйте TreeMap.

...