import java.util.HashMap; import java.util.Iterator; import java.util.Map;

/* Удалить людей, имеющих одинаковые имена
Создать словарь (Map<String, String>) занести в него десять записей по принципу «фамилия» - «имя».
Удалить людей, имеющих одинаковые имена.
*/

public class Solution
{
    public static HashMap<String, String> createMap()
    {
        HashMap<String,String> map = new HashMap<>();
        map.put("Пугачева", "Алла");
        map.put("Басков", "Николай");
        map.put("Джигурда", "Никита");
        map.put("Чехов", "Антон");
        map.put("Павлиашвили", "Сосо");
        map.put("Абв", "Влад");
        map.put("Вгд", "Влад");
        map.put("Лепс", "Григорий");
        map.put("Д'Арк", "Жанна");
        map.put("Климов", "Джордж");
        //напишите тут ваш код
        return map;
    }

public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
{String name;
    Iterator<Map.Entry<String,String>> iterator = map.entrySet().iterator();
    while (iterator.hasNext()){
        Map.Entry<String,String> pair = iterator.next();
        name = pair.getValue();
        removeItemFromMapByValue(map,name);
    }

}

public static void removeItemFromMapByValue(HashMap<String, String> map, String value)
{
    HashMap<String, String> copy = new HashMap<String, String>(map);

    for (Map.Entry<String, String> pair: copy.entrySet())
    {
        if (pair.getValue().equals(value))
            map.remove(pair.getKey());
    }
}

}

задан 01 Ноя '16, 05:49

nikster502's gravatar image

nikster502
154
одобрено: 0%

закрыто 13 Сен, 15:40

AndyRad's gravatar image

AndyRad
13.1k29

Вопрос был закрыт по следующей причине: "Problem is not reproducible or outdated" AndyRad 13 Сен, 15:40


Удалять из map в цикле нельзя, т.к. получаем ConcurrentModificationException. Как избежать исключения ConcurrentModificationException почитайте здесь.

Метод removeTheFirstNameDuplicates работает неправильно, т.к. он (если даже был бы правильно написан), удалял бы из map все записи.

Логика метода removeTheFirstNameDuplicates: если имя встречается в 2 раза и более, вызвать метод removeItemFromMapByValue.

Чтобы найти повторяющиеся имена, можно использовать либо 2 цикла (первый по копии, второй по оригиналу), либо использовать список имен, либо Collections.frequency о котором можно почитать здесь.

ссылка

опубликован 01 Ноя '16, 06:48

WinVam's gravatar image

WinVam
6.3k15
одобрено: 57%

Метод

  public static HashMap<String, String> createMap()

нигде не вызывается, как вы проверяете свой код?

(01 Ноя '16, 06:51) Yuri_Dnepr

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×3,808

Задан: 01 Ноя '16, 05:49

Просмотров: 282 раз

Отредактирован: 13 Сен, 15:40