Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
5 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 137

Как отсортировать map по значению?

05.09.2016, 02:11. Показов 6188. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: Ввести с консоли n целых чисел. На консоль вывести: Числа в порядке убывания частоты встречаемости чисел.
Я нашла по сколько раз число встречается в массиве и занесла в мапу (ключ - число из массива, значение - сколько раз оно там встречается). А как эту мапу отсортировать по значению, чтобы вывести числа в порядке убывания частоты встречаемости.
Вот что у меня есть:
Java
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package VarB10;
 
import java.util.*;
 
/**
  * Ввести с консоли n целых чисел. На консоль вывести: Числа в порядке убывания частоты встречаемости чисел.
 */
public class VarB10 {
    int[] masInteger;
    int n;
 
    private void setN(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите количество чисел: ");
        n = scanner.nextInt();
        masInteger = new int[n];
    }
 
    private int getN(){
        return n;
    }
 
    private void inputMasInteger(int n){
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите " + n + " целых чисел: ");
        for (int i = 0; i < n; i++) {
            masInteger[i] = scanner.nextInt();
        }
    }
 
    private HashMap<Integer, Integer> createMap(int[] mas) //мапа хранит ключи-значение в массиве, значение-количество ключей в массиве
    {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < mas.length ; i++) {
            map.put( mas[i], getCount(masInteger, mas[i]));
        }
        return (HashMap)map;
    }
 
    public static int getCount(int[] mas, int name) //для поиска одинаковых значнеий
    {
        int count = 0;
        for (int i = 0; i < mas.length; i++) {
            if (name==(mas[i])) {
                count ++;
            }
        }
        return count;
    }
 
    public static void main(String[] args) {
        VarB10 c = new VarB10();
        c.setN();
        c.inputMasInteger(c.getN());
        Map<Integer, Integer> map = c.createMap(c.masInteger);
        Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext())
        {
            Map.Entry<Integer, Integer> pair = iterator.next();
            Integer key = pair.getKey();            //ключ
            Integer value = pair.getValue();        //значение
            System.out.println(key + ":" + value);
        }
    }
}
Добавлено через 49 минут
Переписала решение с ArrayList вместо простого массива:
Java
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package VarB10;
 
import java.util.*;
 
/**
 * Ввести с консоли n целых чисел. На консоль вывести: Числа в порядке убывания частоты встречаемости чисел.
 */
public class VarB10 {
    ArrayList<Integer> masInteger = new ArrayList<Integer>();
    int n;
 
    private void setN(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите количество чисел: ");
        n = scanner.nextInt();
    }
 
    private int getN(){
        return n;
    }
 
    private void inputMasInteger(int n){
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите " + n + " целых чисел: ");
        for (int i = 0; i < n; i++) {
            masInteger.add(scanner.nextInt());
        }
    }
 
    private HashMap<Integer, Integer> createMap(ArrayList<Integer> mas) //мапа хранит ключи-значение в массиве, значение-количество ключей в массиве
    {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < mas.size() ; i++) {
            map.put( mas.get(i), getCount(masInteger, mas.get(i)));
        }
        return (HashMap)map;
    }
 
    public static int getCount(ArrayList<Integer> mas, int name) //для поиска одинаковых значнеий
    {
        int count = 0;
        for (int i = 0; i < mas.size(); i++) {
            if (name==mas.get(i)) {
                count ++;
            }
        }
        return count;
    }
 
    public static void main(String[] args) {
        VarB10 c = new VarB10();
        c.setN();
        c.inputMasInteger(c.getN());
        Map<Integer, Integer> map = c.createMap(c.masInteger);
        Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext())
        {
            Map.Entry<Integer, Integer> pair = iterator.next();
            Integer key = pair.getKey();            //ключ
            Integer value = pair.getValue();        //значение
            System.out.println(key + ":" + value);
        }
    }
}
А как отсортировать не знаю (((
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2016, 02:11
Ответы с готовыми решениями:

Как отсортировать Map по значению
Ребятки всем добра! Подскажите как отсортировать Map по значению. Что имеется в виду! Есть карта строк и список игроков. private...

Отсортировать контейнер map по значению элементов
Есть заполненный контейнер unordered_map (ну или просто map) Нужно отсортировать его по значению или сделать сортированный по значению...

Как получить индекс по значению map
std::map&lt;string, string&gt; m {{&quot;123&quot;, &quot;shit&quot;}, {&quot;321&quot;, &quot;govno&quot;}, {&quot;234&quot;, &quot;curva&quot;}}; return m; //Вернёт shit return m; //Должен вернуть...

11
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.09.2016, 08:00
Java
1
map.entrySet().stream().sorted((n1,n2)->n1.getValue().compareTo(n2.getValue())).forEach(n->System.out.println(n));
1
5 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 137
05.09.2016, 17:24  [ТС]
А что такое n1 и n2? Eще и на stream ругается. Я ж начинаю только изучать, попробую понять. Спасибо за ответ
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
05.09.2016, 18:59
Адэля, Java 8 установите
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
06.09.2016, 15:27
Была недавно такая тема - Вывести на консоль числа в порядке убывания частоты встречаемости чисел там всякие были решения, включая и совсем простое с двумя массивами. Если хочется непременно с Map и 8 яву ставить лень, то как вариант:
Java
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
import java.util.*;
 
class SortMapByVal {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        
        System.out.print("Number of integers: ");
        int n = scanner.nextInt();
        assert ( n > 0 );
        while ( n-- > 0 ) {
            System.out.print("> ");
            int i = scanner.nextInt();
            map.put(i, ( map.containsKey(i) ) ? map.get(i) + 1 : 1);
        }
        
        System.out.println("\nNumber\tMeets");
        List<Map.Entry<Integer, Integer>> list = new LinkedList<Map.Entry<Integer, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            public int compare(Map.Entry<Integer, Integer> a, Map.Entry<Integer, Integer> b) {
                return ( b.getValue() - a.getValue() );
            }
        });
        for ( Map.Entry<Integer, Integer> me : list )
            System.out.println(me.getKey() + "\t" + me.getValue());
        
    }
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[andrew@andrew numbers]$ javac SortMapByVal.java 
[andrew@andrew numbers]$ java SortMapByVal
Number of integers: 10
> 5
> 4
> 4
> 8
> 1
> 3
> 1
> 1
> 1
> 8
 
Number  Meets
1   4
4   2
8   2
3   1
5   1
[andrew@andrew numbers]$
1
5 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 137
06.09.2016, 19:04  [ТС]
easybudda, да мне не лень поставить 8 Java. А где ее брать? У меня установлено следующее: ideaIC-2016.2.3 и jdk-8u101. Подскажите где взять 8 Java? Это что-то другое?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
06.09.2016, 19:56
Цитата Сообщение от Адэля Посмотреть сообщение
jdk-8u101
Так вот же... Другое дело, где-нибудь в настройках
Цитата Сообщение от Адэля Посмотреть сообщение
ideaIC-2016.2.3
может быть установлено что-нибудь вроде "компилировать в байткод для java 7", но где там такая пимпа, если вообще есть, я не знаю. Попробуйте код с
Цитата Сообщение от xoraxax Посмотреть сообщение
map.entrySet().stream().sorted((n1,n2)->n1.getValue().compareTo(n2.getValue())) .forEach(n->System.out.println(n));
в консоли собрать...
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
07.09.2016, 11:02
Цитата Сообщение от Адэля Посмотреть сообщение
А что такое n1 и n2? Eще и на stream ругается
Как ругается то?
0
5 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 137
07.09.2016, 22:38  [ТС]
easybudda, спасибо, покапаюсь в настройках. А как с консоли собирать я не умею( Где про это почитать?

Добавлено через 1 минуту
turbanoff, точнее не ругается, а просто красным пишет, может какой пак ее подключить надо. Я только вторую неделю в Java

Добавлено через 43 минуты
easybudda, все получилось, подключила 8. У меня оказывается и 7 была установлена
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
07.09.2016, 23:15
Цитата Сообщение от Адэля Посмотреть сообщение
все получилось, подключила 8. У меня оказывается и 7 была установлена
"А ларчик ломом открывался..." (с)

Цитата Сообщение от Адэля Посмотреть сообщение
А как с консоли собирать я не умею
Сохраняете программу в файл с именем точно таким же, как имя класса, содержащего main() и с расширением .java
Для простоты можно выпилить из него объявление package, если есть, ну или морочиться с созданием соответствующих папок, что для простенького учебного примера лишние заморочки. Открываете консоль, переходите (командой cd) в папку с программой и пишете
javac MyGreatestAppClass.java
Ну и чтобы запустить
java MyGreatestAppClass
Только при этом важно, чтобы ява была правильно установлена (в переменных среды пользователя должно присутствовать
JAVA_HOME со значением c:\java\jdk1.8.0_101
или куда там оно у Вас установлено)
1
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
08.09.2016, 16:33
Адэля, Вы бы пока IDE в сторонку убрали. В книгах по Java не просто так рекомендуют первое время использовать только блокнотик и консоль. Освоитесь с командами консоли, разберетесь с пакетами, а там уже через какое-то время начнете в IDE работать.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.09.2016, 18:22
Цитата Сообщение от striker24 Посмотреть сообщение
В книгах по Java не просто так рекомендуют первое время использовать только блокнотик и консоль.
что же ещё могут рекомендовать книги прошлого века....хорошо хоть ещё компьютер разрешают использовать. Писать в блокноте и компилировать в консоли в 2016 году это никому ненужный навык.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2016, 18:22
Помогаю со студенческими работами здесь

Map с поиском как по ключу, так и по значению
Реализовано ли подобное в stl? (или в boost, например) И как в теории выглядит эта реализация? Предполагаю, что это два сбалансированных...

Как отсортировать массив по первому значению?
Подскажите пожалуйста, как отсортировать этот массив по первому значению tempArray.Name? public void Init(int Length) { ...

Как отсортировать карту( Map<String, Long> ) сначала по значениям, а потом по ключу
Добрый вечер. Интересует вопрос как отсортировать карту(Map&lt;String, Long&gt;) сначала по значениям, а потом по ключу. Я пробовал сделать...

Сортировка map по значению
Здорова господа!!! Есть массив: map&lt;string, int&gt; m; m=3; m=2; m=10; Нужно найти максимальный элемент массива? Пытаюсь...

Сортировка map по значению
Доброго времени суток как можно безболезненно отсортировать map по значению? я пробовал bool Sort_by(const...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru