С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 59

Сортировка коллекции

03.10.2018, 12:17. Показов 1464. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день не могу понять как сделать , может кто нибудь подскажет либо укажет пальцем
У меня есть коллекция
Java
1
HashMap<String, Integer> map = new HashMap<String, Integer>();
в нее внесены записи

Яблоко 15
Груша 12
Слива 16
Виноград 12
Лимон 16

В итоге должно быть отсортировано таким образом

Слива 16
Лимон 16
Яблоко 15
Груша 12
Виноград 12
Пробую таким способом
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
   System.out.println("results");
            for (String key : map.keySet()) {
                System.out.println("key/value: " + key + "/" + map.get(key));
 
 
                class ValueComparator implements Comparator {
 
                    Map base;
 
                    public ValueComparator(Map base) {
                        this.base = base;
                    }
 
                    public int compare(Object a, Object b) {
 
                        if ((Integer) base.get(a) < (Integer) base.get(b)) {
                            return 1;
                        } else if ((Integer) base.get(a) == (Integer) base.get(b)) {
                            return 0;
                        } else {
                            return -1;
                        }
                    }
                }
            }
Но сортирует не правильно подскажите что не так
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.10.2018, 12:17
Ответы с готовыми решениями:

Коллекции(сортировка)
Добрый день,не так давно столкнулся с такой проблемой как сортировки в коллекциях!Ниже будет предоставлен листинг FirstClass import...

Сортировка коллекции
Привет всем. Помогите решить вопрос. Есть задача. Создайте класси, описывающие сотрудников с почасовой заработной платы и фиксированного...

Сортировка коллекции
Добрый день. Допустим дан список List со String объектами отсортированными по алфавиту: &quot;First&quot;, &quot;Four&quot;,...

8
 Аватар для snajper_ro
116 / 101 / 52
Регистрация: 14.09.2011
Сообщений: 696
Записей в блоге: 1
03.10.2018, 12:34
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
import java.security.KeyStore;
import java.util.*;
import java.util.stream.Collectors;
 
public class MainFrame {
 
 
    public static void main(String[] args) {
        Map<String, Integer> fruits = new HashMap<>();
        fruits.put("Яблоко", 15);
        fruits.put("Груша", 12);
        fruits.put("Слива", 16);
        fruits.put("Виноград", 12);
        fruits.put("Лимон", 16);
 
        TreeMap<String, Integer> sorted = new TreeMap<>(fruits);
        Set<Map.Entry<String, Integer>> mappings = sorted.entrySet();
        System.out.println("HashMap after sorting by keys in ascending order ");
        for (Map.Entry<String, Integer> mapping : mappings) {
            System.out.println(mapping.getKey() + " ==> " + mapping.getValue());
        }
        Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
                return e1.getValue().compareTo(e2.getValue());
            }
        };
        List<Map.Entry<String, Integer>> listOfEntries = new ArrayList<Map.Entry<String, Integer>>(fruits.entrySet());
        Collections.sort(listOfEntries,valueComparator);
        System.out.println();
        System.out.println("another way");
        for (Map.Entry<String, Integer> mapping : listOfEntries) {
            System.out.println(mapping.getKey() + " ==> " + mapping.getValue());
        }
 
    }
 
}
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
03.10.2018, 13:16
а так, совсем просто))?
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
import java.util.Arrays;
 
public class CyberForum {
    
    public static void main(String[] args) {
        Fruit[] frBox = new Fruit[6];
        for (int i = 0; i < frBox.length; i++) {
            frBox[i] = new Fruit("Fr " + i);
        }
        Arrays.sort(frBox);
        for (Fruit tmpFr : frBox)
            System.out.println(tmpFr);
    }
}
 
class Fruit implements Comparable<Fruit> {
    private String name;
    private double weight;
 
    Fruit(String name) {
        this.name = name;
        this.weight = 10 + 20*Math.random();
    }
 
    @Override
    public int compareTo(Fruit otherFr) {
        return Double.compare(weight, otherFr.weight);
    }
 
    @Override
    public String toString() {
        return String.format("\"%s - %.3f\",", name, weight);
    }
}
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
03.10.2018, 13:47
не очень решение
сортировка вшита и никак кроме по весу не сортирует, отдельный компаратор гибче как-то

ну и обычно такие вещи складывают в лист, а не массив
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
03.10.2018, 13:56
это даже не решение, а так, зарисовка на "подумать в другую сторону"))
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
03.10.2018, 14:02
AD86, мапа для того, чтоб быстро по ключу находить. Нужна сортировка - или переводите, или храните в другой структуре.
0
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 59
03.10.2018, 15:25  [ТС]
Может кто то подскажет написал свой код вроде бы все хорошо но меня смущает одно не работает?
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
import java.security.KeyStore;
import java.util.*;
import java.util.stream.Collectors;
 
public class Coctail {
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    ValueComparator bvc = new ValueComparator(map);
    TreeMap<String, Integer> sorted_map = new TreeMap<String, Integer>(bvc);
    public static void main(String[] args) {
        FruitSort fruitSort = new C().new FruitSort();
        fruitSort.enterChat();
    }
 
    class FruitSort {
        private String[] massivFruit;
 
        void enterChat() {
            Scanner scanner = new Scanner(System.in);
            int number = scanner.nextInt();
            massivFruit = new String[number];
 
            for (int i = 0; i < massivFruit.length; i++) {
                Scanner scannerName = new Scanner(System.in);
                String name = scannerName.next();
                massivFruit[i] = name;
            }
            sortFruit();
        }
 
        void sortFruit() {
            for (int i = 0; i < massivFruit.length; i++) {
                int count = 0;
                for (int j = 0; j < massivFruit.length; j++) {
                    if (massivFruit[i].equals(massivFruit[j])) {
                        count++;
                    }
                }
                map.put(massivFruit[i], count);
            }
 
 
            sorted_map.putAll(map);
            System.out.println(sorted_map);
            for (String key : sorted_map.keySet()) {
                System.out.println(key);
            }
        }
    }
    class ValueComparator implements Comparator<String> {
        Map<String, Integer> base;
 
        public ValueComparator(Map<String, Integer> base) {
            this.base = base;
        }
        public int compare(String a, String b) {
            if (base.get(a) >= base.get(b)) {
                return -1;
            } else {
                return 1;
            }
        }
    }
}
Смысл программы такой запрашивает количество фруктов в коктейле - 8. Далее я ввожу данные к примеру.
Лимон
Дыня
Арбуз
Банан
Банан
Арбуз
Дыня
Лимон

В итоге должно быть выведено по моей логике.
Лимон // 2
Дыня // 2
Арбуз // 2
Банан // 2
У меня проблема следующая почему то меняет местами Дыня и Лимон . Хотя у них значение у обоих 2 и 2. Но почему то поменяло хотя вывести должно
Лимон
Дыня
Арбуз
Банан
не могу понять почему меняет местами первые два ключа
0
 Аватар для snajper_ro
116 / 101 / 52
Регистрация: 14.09.2011
Сообщений: 696
Записей в блоге: 1
03.10.2018, 15:28
напишите пожалуйста в программе исходные данные , которые вы вводите
это упрощает, в самой программе, не с помощью ввода
0
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 59
03.10.2018, 15:55  [ТС]
Смысл такой в этой программе что она подсчитывает количеств введенных фруктов одних и тех же.Если к примеру арбузов больше то они печатаються в начале списка, если бананов и дынь одинаковое количество то они печатаются после арбузов в том же порядке как и введены.

Добавлено через 2 минуты
Java
1
2
3
4
5
  for (int i = 0; i < massivFruit.length; i++) {
                int count = 0;
                for (int j = 0; j < massivFruit.length; j++) {
                    if (massivFruit[i].equals(massivFruit[j])) {
                        count++;
Тут подсчитывается сколько раз встречается один и тот же фрукт а потом я вношу эти данные в TreeMap. А если я сразу внесу данные то придется поменять логику подсчета фруктов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.10.2018, 15:55
Помогаю со студенческими работами здесь

Специфическая сортировка коллекции
Задан список целых чисел и число X. Не используя вспомогательных объектов и не изменяя размера списка, переставить элементы так, чтобы...

Сортировка коллекции List с компаратором
Подскажите пожалуйста как создать компаратор для сортировка ArrayList типа String. Везде в примерах показана сортировка коллекции с...

Получение новой коллекции путем фильтрации элементов коллекции находящихся в другой коллекции
Всем привет, нуждаюсь в помощи знатоков) Имеется вот такая иерархия если представить в JSON: { teachers: ...

Сортировка коллекции
Добрый вечер, какой должен быть предикат, чтобы отсортировать массив по условию : - значимые сжимаются к друг другу в начало -...

Сортировка коллекции
Всем Добрый День. Можете помочь с такой вот проблемой. Есть коллекция изначально она из 4-х элементов, но в дальнейшем будет увеличивать...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru