powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка по значениям в TreeMap?
35 сообщений из 35, показаны все 2 страниц
Сортировка по значениям в TreeMap?
    #33172307
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Подскажите, пожалуйста, можно ли в TreeMap, используя компоратор сортировать не по ключам, а по их значениям? Если нельзя, то как подойти к этой проблеме? Нужна идея.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33172341
ponomarevvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать класс ключа, который бы имел ссылку на объект-значение И в компараторе сравнивать эти значения как-нибудь. Правда, класс объектов-значений тоже должен будет реализовывать Comparable…
Что-то другого на ум не идёт, хотя и это - вырезка гланд автогеном. А зачем надо сортировать по значениям?
--С уважением, ponomarevvb--
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33172437
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.Comparator;
 import  java.util.TreeMap;
 import  java.util.Iterator;
 import  java.util.Map;
 import  java.util.*;

 public   class  SortedTreeMap  implements  Comparator
{
   private  TreeMap tm =  new  TreeMap();

   public   static   void  main( String[] args )
  {
    SortedTreeMap stm =  new  SortedTreeMap();
  }

   public  SortedTreeMap()
  {
    tm.put( "abc", "book" );
    tm.put( "ix ", "art" );
    tm.put( "lx ", "cook" );
    tm.put( "nx ", "dog" );
    tm.put( "rx ", "cool" );
    tm.put( "xyz", "rest" );
    tm.put( "uvw", "lost" );
    tm.put( "tpr", "value");
    TreeMap tm1 =  new  TreeMap( this );
    tm1.putAll( tm );
    Iterator it = tm1.entrySet().iterator();
     while ( it.hasNext() )
    {
      Map.Entry me = (Map.Entry)it.next();
      System.out.println(me.getKey() + "  " + (String)me.getValue() + "\n");
    }
  }
   public   int  compare( Object o1, Object o2 )
  {
    return  ((String)tm.get( o1 )).compareTo( (String)tm.get( o2 )) ;
  }
}


...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33176735
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Учусь, а учиться проще на нужных вещах. Сделал простенькую программку, которая создает частотный словарь иностранных слов в файлах натянутых из инета. Помогает понять сколько не знаешь слов характерных для определенной темы на аглицком.

Спасибо за подсказки.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33179075
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to johanna
Не будет вВш пример сортировать по значениям ключей.
По умолчанию compare( Object a, Object b ) как объект принимает именно уникальные ключи. А проблема, как заставить принимать не уникальные значения ключей. Должен вроде быть какой-то выход. Почему нельзя по значениям сортировать?
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33179095
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toСергей. Р.
не только будет, он еще это и делает.
проверьте сами.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33179149
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
42.
43.
44.
45.
46.
 import  java.util.Comparator;
 import  java.util.TreeMap;
 import  java.util.Iterator;
 import  java.util.Map;
 import  java.util.*;

 public   class  SortedTreeMap  implements  Comparator
{
   private  TreeMap tm =  new  TreeMap();

   public   static   void  main( String[] args )
  {
    SortedTreeMap stm =  new  SortedTreeMap();
  }

   public  SortedTreeMap()
  {
    tm.put( "abc", "book" );
    tm.put( "ix ", "art" );
    tm.put( "lx ", "cook" );
    tm.put( "nx ", "dog" );
    tm.put( "rx ", "cool" );
    tm.put( "xyz", "rest" );
    tm.put( "uvw", "lost" );
    tm.put( "tpr", "value");   
    System.out.println("содержимое папки, сортированной по ключам");
    Iterator it = tm.entrySet().iterator();
     while ( it.hasNext() )
    {
      Map.Entry me = (Map.Entry)it.next();
      System.out.println(me.getKey() + "  " + (String)me.getValue() + "\n");
    }
     System.out.println("новая папка созданная и отсортированная по значениям");   
    TreeMap tm1 =  new  TreeMap( this );
    tm1.putAll( tm );
    it = tm1.entrySet().iterator();
     while ( it.hasNext() )
    {
      Map.Entry me = (Map.Entry)it.next();
      System.out.println(me.getKey() + "  " + (String)me.getValue() + "\n");
    }
  }
   public   int  compare( Object o1, Object o2 )
  {
    return  ((String)tm.get( o1 )).compareTo( (String)tm.get( o2 )) ;
  }
}
на выходе получаем:

содержимое папки, сортированной по ключам
abc book

ix art

lx cook

nx dog

rx cool

tpr value

uvw lost

xyz rest


новая папка созданная и отсортированная по значениям

ix art

abc book

lx cook

rx cool

nx dog

uvw lost

xyz rest

tpr value

Process terminated with exit code 0
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33179153
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorry, слово "уникальные" пропустила.
организуйте свои данные в другую структуру- вот и решение вашей проблемы.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33180318
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда, на всякий случай, извиняюсь заранее. Переделка моего скрипта по Вашему предложению меня не осчастливила. Пока. Видимо, я что-то просмотрел. Буду разбираться с Вашим чистым примером. Спасибо за отзывчивость.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33180696
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно работает, только понять каким образом я не могу.
В классике компаратор выделяют в отдельный класс и работают с ним так:
TM = new TreeMap(new MyComp () ); В этом случае сортируется по ключам.
В Вашем пример реально сортирует по значениям, но мне не понятно
как это происходит и как быть, если значения цифры? Чувствую
недостаток теории, но где ее восполнить? В моих книгах и инете пока ничего путного не нашел. Не подскажете ли, где тут собака зарыта. Как определяются объекты, которые нужно сравнить, если они из пары ключ/значение и как быть если значение int?
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33180772
d(°_°)b     .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей. Р., вам же уже сказали, что отсортировать TreeMap по ключам не получится, т.к., если у разных ключей будут одинаковые значения, TreeMap скушает все пары кроме последней.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33180800
d(°_°)b     .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извините, имелось ввиду: отсортировать по значениям не получится :)
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33180969
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
42.
43.
44.
 import  java.util.Map;
 import  java.util.TreeMap;
 import  java.util.Comparator;

 public   class  WordCounter {

     private  Map<String, Integer> byWord =  new  TreeMap<String, Integer>();

     private  Map<String, Integer> byCount =  new  TreeMap<String, Integer>( new  Comparator<String>() {
         public   int  compare(String o1, String o2) {

            Integer i1 = byWord.containsKey(o1) ? byWord.get(o1) :  0 ;
            Integer i2 = byWord.containsKey(o2) ? byWord.get(o2) :  0 ;

             int  compareValues = i1.compareTo(i2);
             return  compareValues ==  0  ? o1.compareTo(o2) : compareValues;
        }
    });

     public  WordCounter addWord(String word) {
        Integer count = (byWord.containsKey(word) ? byWord.get(word) :  0 ) +  1 ;
        byCount.remove(word);
        byWord.put(word, count);
        byCount.put(word, count);
         return   this ;
    }

     public  Map byWord() {  return  byWord; }

     public  Map byCount() {  return  byCount; }

     public   static   void  main(String[] args) {
        WordCounter c =  new  WordCounter();

        c.addWord("yyy").addWord("yyy").addWord("xxx");
        c.addWord("yyy").addWord("xxx").addWord("zzz");
        c.addWord("zzz").addWord("yyy").addWord("bbb");
        c.addWord("bbb").addWord("bbb").addWord("bbb");
        c.addWord("kkk").addWord("kkk").addWord("kkk");

        System.out.println(c.byWord());
        System.out.println(c.byCount());
    }
}


Сергей. Р.В Вашем пример реально сортирует по значениям
В примере выше была ошибка.


Как определяются объекты, которые нужно сравнить, если они из пары ключ/значение и как быть если значение int?

- Ключём в map сортируемом по значению должен быть не исходный ключ (слово), а (ключ + значение). Это не обязательно писать (ключ и так уникален), но нужно иметь ввиду.

- Для того, чтобы в компараторе получить значение связанное с ключём (т.е. полный ключ, который и должен сравнивать компаратор) используется дублирующий мap.

- int - не может быть значением, только Integer. Об этом пишут в любой книге по java.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33180985
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs
Код: 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.
42.
43.
44.
 import  java.util.Map;
 import  java.util.TreeMap;
 import  java.util.Comparator;

 public   class  WordCounter {

     private  Map<String, Integer> byWord =  new  TreeMap<String, Integer>();

     private  Map<String, Integer> byCount =  new  TreeMap<String, Integer>( new  Comparator<String>() {
         public   int  compare(String o1, String o2) {

            Integer i1 = byWord.containsKey(o1) ? byWord.get(o1) :  0 ;
            Integer i2 = byWord.containsKey(o2) ? byWord.get(o2) :  0 ;

             int  compareValues = i1.compareTo(i2);
             return  compareValues ==  0  ? o1.compareTo(o2) : compareValues;
        }
    });

     public  WordCounter addWord(String word) {
        Integer count = (byWord.containsKey(word) ? byWord.get(word) :  0 ) +  1 ;
        byCount.remove(word);
        byWord.put(word, count);
        byCount.put(word, count);
         return   this ;
    }

     public  Map byWord() {  return  byWord; }

     public  Map byCount() {  return  byCount; }

     public   static   void  main(String[] args) {
        WordCounter c =  new  WordCounter();

        c.addWord("yyy").addWord("yyy").addWord("xxx");
        c.addWord("yyy").addWord("xxx").addWord("zzz");
        c.addWord("zzz").addWord("yyy").addWord("bbb");
        c.addWord("bbb").addWord("bbb").addWord("bbb");
        c.addWord("kkk").addWord("kkk").addWord("kkk");

        System.out.println(c.byWord());
        System.out.println(c.byCount());
    }
}


Эх, чтоб он еще и откомпилировался. Умом я его объять не могу пока.
Похоже проще обходной путь найти. В конце концов мне надо просто отсортировать по не уникальному значению и распечатать. Нормальные герои всегда идут в обход.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33181025
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей. Р.Похоже проще обходной путь найти. В конце концов мне надо просто отсортировать по не уникальному значению и распечатать. Нормальные герои всегда идут в обход.
правильно, самое простое сказать своей базе, где данные хранятся
Код: plaintext
select key, value from myTable order by value;
а потом уже в подходящую структуру засовывать
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33181027
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs В примере выше была ошибка.
какая?
пример выше сортировал по уникальным значениям
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33181079
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей. Р.
Эх, чтоб он еще и откомпилировался. Умом я его объять не могу пока.
Похоже проще обходной путь найти. В конце концов мне надо просто отсортировать по не уникальному значению и распечатать. Нормальные герои всегда идут в обход.

Какие проблемы с объятием умом? :) Единственное над чем стоит задуматься, так это методо addWord и тем, почему не один оператор там нельзя переставить :)

Нормальному герою стоит поставить java 1.5, либо заменить в моём коде генерики на касты классов.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33181080
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna NotGonnaGetUs В примере выше была ошибка.
какая?
пример выше сортировал по уникальным значениям

Это был ответ не вам :)

Человек написал, что ваш код работает для его целей. Он работает, но как вы сами отметили выше, не для его целей. Автору требует сортировка по не уникальным значениям.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33181132
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я может быть не верно где-то выразился. В директории находятся текстовые документы на основе, которых строится частотный словарь. В хэшах все хорошо кроме частной задачи, как сделать сортироку по значениям (которые естественно не уникальны, т.к. разные слова могут появляться одинаковое число раз в исследуемом материале). И хочется сделать не через задницу. Как через задницу уже придумал, но это не красиво выглядит.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33181198
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей. Р.Я может быть не верно где-то выразился. В директории находятся текстовые документы на основе, которых строится частотный словарь. В хэшах все хорошо кроме частной задачи, как сделать сортироку по значениям (которые естественно не уникальны, т.к. разные слова могут появляться одинаковое число раз в исследуемом материале). И хочется сделать не через задницу. Как через задницу уже придумал, но это не красиво выглядит.

Фу, блин. Если что-то не ясно - спроси. В коде который я привёл, treeMap сортируется по "значениям".

[offtopic]
Кстати, кто быстрее? :)

Примерно так тестировать:

Код: 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.
 public   interface  ICounter {
    ICounter addWord(String word);
    Object byCount();
}

 public   class  CounterTester {
     private   static   void  test(ICounter c) {
        System.out.println(c.getClass().getName());
         long  time = System.currentTimeMillis();
         for  ( int  i= 0 ; i<  1000000 ; i++){
            c.addWord("yyy").addWord("yyy").addWord("xxx");
            c.addWord("yyy").addWord("xxx").addWord("zzz");
            c.addWord("zzz").addWord("yyy").addWord("bbb");
            c.addWord("bbb").addWord("bbb").addWord("bbb");
            c.addWord("kkk").addWord("kkk").addWord("kkk");
            c.addWord("yy").addWord("yy").addWord("xx");
            c.addWord("yy").addWord("xx").addWord("zz");
            c.addWord("zz").addWord("yy").addWord("bb");
            c.addWord("bb").addWord("bb").addWord("bb");
            c.addWord("kk").addWord("kk").addWord("kk");
        }
        System.out.println(c.byCount());
        System.out.println("Time:" + (System.currentTimeMillis() - time));
    }

     public   static   void  main(String[] args) {
        test( new  SuperCounter());
    }
}

Эта штука в 20(!) раз быстрее каунтера, которого я нарисовал раньше :)
Код: 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.
 import  java.util.HashMap;
 import  java.util.TreeMap;
 import  java.util.Comparator;

 public   class  SuperCounter  implements  ICounter {

     private   class  MutableInteger {
         int  value;
         public  String toString() {
             return  String.valueOf(value);
        }
    }

     private  HashMap words =  new  HashMap();

     public  ICounter addWord(String word) {
        MutableInteger count = (MutableInteger) words.get(word);
         if  (count ==  null ) {
            count =  new  MutableInteger();
            words.put(word, count);
        }
        count.value++;
         return   this ;
    }

     public  Object byCount() {
        TreeMap sortedMap =  new  TreeMap( new  Comparator() {
             public   int  compare(Object o1, Object o2) {
                 int  i1 = ((MutableInteger) words.get(o1)).value;
                 int  i2 = ((MutableInteger) words.get(o2)).value;
                 if  (i1 > i2)  return   1 ;
                 if  (i1 < i2)  return  - 1 ;
                 return  ((String) o1).compareTo((String) o2);
            }
        });
        sortedMap.putAll(words);
         return  sortedMap;
    }
}
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33181576
Сергей. Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsФу, блин. Если что-то не ясно - спроси. В коде который я привёл, treeMap сортируется по "значениям".


Спасибо за помощь, но будьте реалистом. Кто будет внимательно разбираться с примерм, который даже откомпилировать невозможно? Проблему я уже решил, только слова с малых и заглавных букв в разные деревья попадают и учитываются отдельно. Может подскажите, как в один регистр их перекидывать?
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33182207
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Сергей. Р.
прежде чем выбирать структуру для своих данных, не проще ли сначала проанализировать что я хочу сделать с моими данными:
откуда получить,
как сохранить,
как обработать,
как показать
- а потом согласно этому выбирать подходящие для этого структуры.
Т.е. если бы мне надо было сортировать данные по значениям, то я бы, например,
TreeMap для своих данных не выбрала.
Другим языком к чему брать чайник если собираешься варить суп?
Суп, конечно, можно и в чайнике сварить, но удобно ли это?
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33182422
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постановка Сергея достаточно сложна для простого
применения классов коллекций. По крайней мере
мне показалось что реализация тянет на интерфейс
таблицы к встраиваемой СУБД.

ИМХО.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33183099
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей. РСпасибо за помощь, но будьте реалистом. Кто будет внимательно разбираться с примерм, который даже откомпилировать невозможно?
Я реалист. Пример отлично компилируется. Первый стребует jdk1.5, второму пойдёт всё кроме самых древних версий.

Проблему я уже решил
Расскажешь как?

Может подскажите, как в один регистр их перекидывать?
String#toLowerCase()

mayton
реализация тянет на интерфейс таблицы к встраиваемой СУБД

Задача: подсчитать количество вхождений разных слов в текстовых файлах и отсортировать из по количеству вхождений.

Постановку конечно можно бесконечно долго уродовать, предъявляя разные хитрые требования, но учитывая слова Сергея Р "Учусь, а учиться проще на нужных вещах." , на верное не стоит этим заморачиваться :)
Самостоятельной ценности такая задача не имеет, а конкретное прикладное использование накладывает свои ограничения.

Мне кажется, что в общем случае, дерево с узлами-символами (+ аттрибут количество вхождений) для быстрого нахождения слова и инкремента счётчика + итератор по этому дереву, чтобы получить список "слово, количество" + быстрая сортировка - великолепное решение. Различных слов не так уж много, чтобы начались проблемы с нехваткой памяти.
...
Рейтинг: 0 / 0
Сортировка по значениям в TreeMap?
    #33183329
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs wrote:
> Задача: подсчитать количество вхождений разных слов в текстовых файлах и
> отсортировать из по количеству вхождений.
>
Задача элементарно решается на PERL:
Код: plaintext
1.
2.
3.
4.
map { $h{lc $_}++} ($line =~ m/\w+/gc)  while($line = <>);
for $key ( sort { $h{$b} <=> $h{$a} }  keys %h) {
         print "$key\t$h{$key}\n";
}
Не Java'й единой жив программист !
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Сортировка по значениям в 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
35 сообщений из 35, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка по значениям в TreeMap?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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