Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 21.03.2019
Сообщений: 6

В Мапе использовать значение как ключ

09.05.2019, 17:29. Показов 1620. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть задача - разработать программу – картотеку домашних животных. У каждого животного есть уникальный id, кличка, вес, хозяин (объект класс Person с полями – имя, возраст, пол). Ну и далее какие методы надо реализовать.
Ну вроде все просто. Создал мапу. В качестве ключа использовал id животного. Для поиска по id просто тащим сущности по методу get(id). Для поиска по имени сделал простой перебор через Map.entry и там вытаскиваю по имени.
Но принимающий такую реализацию поиска по имени не оценил, сказал, что перебором долго. Надо придумать что-то другое. Формировать промежуточную мапу с ключом по имени - не пойдет, т.к. тогда нельзя будет добавить животных с одинаковыми кличками (хотя условие задачи на это не указывает). Набросал такой вариант, но там тоже перебор. 2 дня ломаю голову, больше ничего не придумал. Что еще можно придумать ?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static Map<Integer, Animal> animalMap = new HashMap<>();
//тут заполняем первоначальную мапу
 
  public static void getAnimalByName(String name) {
        Set<Integer> integerSet = animalMap.keySet();
        for (Integer i : integerSet) {
            List<Animal> arrayList = new ArrayList<>();
            arrayList.add(animalMap.get(i));
            Map<String, List<Animal>> nameAnimalValue = new HashMap<>();
            for (Animal a : arrayList) {
                String nameKey = a.getName();
                if (!nameAnimalValue.containsKey(name)) {
                    nameAnimalValue.put(name, new ArrayList<>());
                }
                nameAnimalValue.get(name).add(a);
                System.out.println(nameAnimalValue.get(nameKey));
            }
        }
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2019, 17:29
Ответы с готовыми решениями:

Как использовать ключ командной строки в VB приложениях?
В общем, вот и весь вопрос... Запускаю программу, в командной строке указываю параметр запуска... 'C:/MyPath/prog.exe /a' Как...

Как использовать ключ RSA в AES шифрование?
Никак не могу сообразить как мне правильно сделать реализацию чтобы впихнуть ключ RSA 2048 в шифрование AES. У меня есть этот метод...

Как взять значение и ключ из Map?
мне нужно сравнить все значения в мэпе с определенным значением. мне нужно взять каждый ключ и каждое значение из него. как это сделать?...

2
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.05.2019, 17:35
Цитата Сообщение от home30 Посмотреть сообщение
Формировать промежуточную мапу с ключом по имени - не пойдет, т.к. тогда нельзя будет добавить животных с одинаковыми кличками
Кэп говорит что в таком случае значение мапы должно быть List<Animal>
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
09.05.2019, 18:03
Цитата Сообщение от home30 Посмотреть сообщение
public static void getAnimalByName(String name) {
если метод гет то он должен что-то вернуть, по названию предположу, что Animal

Цитата Сообщение от home30 Посмотреть сообщение
сделал простой перебор через Map.entry
не надо, просто используй метод values() у мапы который вернет лист всех животных, а далее стрим или цикл
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2019, 18:03
Помогаю со студенческими работами здесь

Вычисляет ли словарь хеш, если ключ - числовое значение или в таком случае за хеш берется сам ключ?
Нужен Dictionary&lt;int,Dictionary&lt;int,string&gt;&gt; (т.к. максимальное значение ключа не более 40 можно заменить на...

Массив не принимает значение переменной как ключ
Есть инпуты&lt;input class='in' type='text' data-id='1' value='text 1'&gt; &lt;input class='in' type='text' data-id='2' value='text 2'&gt; ...

Как добавить ключ => значение в начало массива
Здравствуйте, помогите. Как добавить ключ =&gt; значения в начало массива $age = array (&quot;макс&quot; =&gt; 32, ...

SortedList: как добавить в список пару ключ-значение
Функция MySort.Add добавляет в список пару ключ-значение. Но если у меня значение состоит из двух полей, я сделал так: ...

Как лучше хранить данные вида ключ - значение?
Программа должна работать с примерно 1000 записей вида ключ - значение, где ключ это что-то вроде уникального ID, а значение это число типа...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru