powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка по значениям в TreeMap?
10 сообщений из 35, страница 2 из 2
Сортировка по значениям в TreeMap?
    #33183570
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To johanna.
Никаких баз мне не надо, вообще, а TreMap выбран из-за того, что это хэш и есть удобная и быстрая возможность найти искомый ключ, являющийся словом, увеличить на единицу значение появления этого слова в исследуемых файлах и cделать My_TreeMap.put(word, new String (new_namber)); Когда все файлы просмотрены, просто сделать листинг результатов. Проблема появилась когда решил отсортирвать слова по частоте появления. Если вызываешь так: TreeMap sortedMap = new TreeMap(new MyComp());

То в

class MyComp implements Comparator{
public int compare(Object o1, Object o2) {
return (o1).compareTo(o2);

}

Object o1 и Object o2 это ключи TreeMap. Как в нем добраться до значений, соответствующих этим ключам непонятно. Поэтому и спросил совета, возможно ли вообще по простому в данной ситуации как-то вывернуться. Через .... можно хоть десяток способов найти. Но интересно, как это сделать красиво и оптимально, если используешь TreeMap.

To NotGonnaGetUs
У меня и второй не откомпилировался, но это частности. Через Ж.. можно решить с использованием TreeSet. Пример как сортировать по фамилии, если элемент коллекции: строка Имя Фамилия, есть в любой книге по Java 2. На счет ценности могу поспорить. Как показал поиск в Инете задача, как отсортировать по значения в разных ситуациях достаточно актуальна и эта тема может еще кому-нибудь помочь.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33183607
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей. Р.cделать My_TreeMap.put(word, new String (new_namber));
Integer.valueOf(new_namber)!!!


Через .... можно хоть десяток способов найти. Но интересно, как это сделать
красиво и оптимально, если используешь TreeMap.

Использовать HashMap для хранения ключ-значение - это через жопу? :)
Достаточно понять только то, что у тебя ключ - это пара "слово" "количество вхождений". Сразу станет понятно, почему тебе нужен Set, а не Map, что бы было красиво.



У меня и второй не откомпилировался, но это частности.

Соболезную, расставить иморты и назвать правильно файлы, в которые вставляешь код, нужно уже уметь.

Как показал поиск в Инете задача, как отсортировать по значения в разных ситуациях достаточно актуальна и эта тема может еще кому-нибудь помочь.
Map не определяет порядок элементов. Любые варианты (ТreeMap, LinkedHashMap) это уже извращения, поскольку вольно не вольно превращают map во что-то другое (больше памяти, зависимость времени вставки/выборки от числа записей и т.п. ) :)
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33183785
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовать HashMap для хранения ключ-значение - это через жопу? :)


Это я про сортировку имел в виду.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33183822
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и всё же я бы не стала использовать для этих целей TreeMap. Уже только потому, что мне нужна сортировка как по ключам так и по значениям. Значит
создавая TreeMap мы уже сортируем по ключам, хотя это может и не понадобиться. HashMap Быстрее, чем TreeMap.
А сортировать в обе стороны можно через Collections.sort и Comparator.
Вобщем если переписать мой первый пример, то это будет выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
 import  java.util.*;

 public   class  SortedHashMap
{
   public   static   void  main( String[] args )
  {
    Map hm =  new  HashMap();
    hm.put( "abc", "book" );
    hm.put( "ix ", "art" );
    hm.put( "lx ", "cook" );
    hm.put( "nx ", "dog" );
    hm.put( "rx ", "cool" );
    hm.put( "xyz", "rest" );
    hm.put( "uvw", "lost" );
    hm.put( "tpr", "value");
    hm.put( "fvb", "value");
    List entrylist =  new  ArrayList(hm.entrySet());
    Collections.sort(entrylist, new  ValuesComparator());
    System.out.println("sorted by values:  " + entrylist);
    Collections.sort(entrylist, new  KeysComparator());
    System.out.println("sorted by keys " + entrylist);
  }

}
 class  ValuesComparator   implements  Comparator {
   public   int  compare(Object o1, Object o2) {
    Map.Entry e1 = (Map.Entry) o1;
    Map.Entry e2 = (Map.Entry) o2;
    Comparable c1 = (Comparable)e1.getValue();
    Comparable c2 = (Comparable)e2.getValue();
     return  c1.compareTo(c2);
  }
}
 class  KeysComparator   implements  Comparator {
   public   int  compare(Object o1, Object o2) {
    Map.Entry e1 = (Map.Entry) o1;
    Map.Entry e2 = (Map.Entry) o2;
    Comparable c1 = (Comparable)e1.getKey();
    Comparable c2 = (Comparable)e2.getKey();
     return  c1.compareTo(c2);
  }
}

sorted by values: [ix =art, abc=book, lx =cook, rx =cool, nx =dog, uvw=lost, xyz=rest, fvb=value, tpr=value]
sorted by keys [abc=book, fvb=value, ix =art, lx =cook, nx =dog, rx =cool, tpr=value, uvw=lost, xyz=rest]
Process terminated with exit code 0

причём и уникальные значения без проблем
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33184651
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To johanna
А я и делал на HashMap порвоначально, но потом не совсем разобравшись, как это будет работать, соблазнился тем, что TreeMap принимает компаратор. Любая проблема имет массу решений, надо только их найти. Буду переделовать на основе Вашего предложения. Спасибо за помощь.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33191052
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To johanna
Такая казалось бы мелочная проблема отнимает массу времени.
Ваш пример, все равно не так как нужно работает для цифр.
Результат:
sorted by values: [abc=1, ix =11, tpr=12, lx =3, rx =30, nx =32, uvw=4, xyz=6,
fvb=99]

Придется похоже изголяться по другому. Ну уж точно через .....
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33191127
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для цифр Вам надо только Comparator под цифры переписать. У меня он на string написан.
Сравнивать не через equal a > или <.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33191175
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna wrote:
> для цифр Вам надо только Comparator под цифры переписать. У меня он на
> string написан.
> Сравнивать не через equal a > или <.
Уточнение: если заворачивать значения в Integer, то см. Integer.compareTo(Object)
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33191444
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где ж вы раньше были? Уже до самого дошло.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33192325
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей. Р.Где ж вы раньше были? Уже до самого дошло.

мы были здесь :)

/topic/201156&pg=1#1729628
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка по значениям в TreeMap?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]