Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.07.2016, 16:37   #11
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Вот более адекватное решение



Код:
class Rextester
{  
    public static void main(String args[])
    {
        HashMap<String, String> map = createMap();
        
        removeTheFirstNameDuplicates(map);
        
         for (Map.Entry<String, String> pair: map.entrySet())   
             
             System.out.println(pair.getKey() + " " + pair.getValue() );
    }
    
    public static HashMap<String, String> createMap()
    {
        HashMap<String, String> map = new HashMap<String, String>();
    map.put("1", "Mama");
    map.put("2", "Mila");
    map.put("3", "Ramu");
    map.put("4", "Mama");
    map.put("5", "Mila");
    map.put("6", "Ramu");
    map.put("7", "Mama");
    map.put("8", "Mila");
    map.put("9", "Ramu");
    map.put("10", "Mama");
    map.put("11", "### Mama");
    
    return map;

    }

    
    public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
    {
        ArrayList<String> list_Value = new ArrayList<String>();
        ArrayList<String> list_temp = new ArrayList<String>();
		
        for (Map.Entry<String, String> pair: map.entrySet())  list_Value.add(pair.getValue());
		
    for (int i=0;i<list_Value.size();i++) 
    {
       if (Collections.frequency(list_Value,list_Value.get(i)) > 1)
        {
            removeItemFromMapByValue(map, list_Value.get(i));
            list_temp.add(list_Value.get(i));
            list_Value.removeAll(list_temp);
        }
    }
    }

    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());
        }
    }

}
RAFA91 вне форума
Старый 29.07.2016, 16:59   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Код:
if (Collections.frequency(list_Value,list_Value.get(i)) > 1)
выучили новый метод и спешите его применить?
удалите лучше это безобразие.*

или хоть изучите разницу между frequency и contains.(знаете?)

* - поясню, производительность в вашем случае драматичная.
на мелких коллекциях этого не заметно, на большой же коллекции разница будет.(особенно при большом количестве совпадающих элементов)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 30.07.2016, 13:20   #13
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

можно еще лучше написать

Код:
public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
    {
        ArrayList<String> list_Value = new ArrayList<String>(map.values());
        ArrayList<String> list_temp = new ArrayList<String>();
		
        for (int i=0;i<list_Value.size();i++) 
    {
       if (Collections.frequency(list_Value,list_Value.get(i)) > 1)
        {
            removeItemFromMapByValue(map, list_Value.get(i));
            list_temp.add(list_Value.get(i));
            list_Value.removeAll(list_temp);
           i--;
        }
    }
    }
RAFA91 вне форума
Старый 30.07.2016, 14:39   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

уже лучше, хотя все еще используете frequency.
если оценивать задачу с точки зрения решенности, то она решена.
а вот за эффективность решения, вам 3

PS: и не стоит плеваться ядом
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 30.07.2016, 15:44   #15
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

она и так эффективна
RAFA91 вне форума
Старый 30.07.2016, 16:03   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

чем вариант с contains?
обосновать сможете?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 30.07.2016, 16:07   #17
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

а вы можете доказать что frequency не эффективная ?


пожалуйста реализацию frequency в студию. не объявление
RAFA91 вне форума
Старый 30.07.2016, 16:21   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а давайте вы покажете где я говорил что frequency не эффективная?

я говорил про ее применение в вашем случае.
вы применяете ее как contains, но между ними есть большая разница.
(даю подсказку, разница в том когда функция остановится)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 30.07.2016, 16:33   #19
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

вы сказали что мой код с точки зрения производит. не эффективен.

теперь доказывайте что frequency хуже чем та булевая.

раскрывайте ее реализацию.
RAFA91 вне форума
Старый 30.07.2016, 16:49   #20
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы всерьез не различаете разницы между применением и общим случаем?
frequency не хуже, не лучше чем contains. (что лучше, молоток или отвертка? зависит от применения, не так ли?)

вы же frequency применяете вместо contains.
НО, разница между ними в том что frequency всегда проходит по всей коллекции, сравнивая каждый элемент*, количество сравнений всегда N
contains идет до первого найденного элемента, не продолжая сравнивать когда нашли первый. количество сравнений <=N(меньше или равно, в случаях отсутствия элемента разницы не будет, но при наличии, она есть и чем больше подобных элементов(не буду расписывать все нюансы), тем она больше).

* - так же стоит не забывать что сравнение строк, операция не такая дешевая, так как строка должна быть сравнена по-символьно(на практике по-байтно) для того чтоб сказать что они равны.

надеюсь у вас хватит сил это прочесть.
реализации кстати довольно простые.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить из каталога все файлы, кроме файлов, имеющих в названии заданную последовательность символов\ Shell Nickolay0512 Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 0 16.02.2014 16:26
Одинаковые имена Ramirag C# (си шарп) 4 29.08.2011 09:09
Передача параметров в функции(Одинаковые имена дефолта и передаваемого параметра) это плохо? Человек_Борща Общие вопросы Delphi 3 13.04.2011 16:54
суммировать одинаковые имена stbo Microsoft Office Excel 4 29.06.2010 12:51
удалить в строке все одинаковые символы Михаил70 Помощь студентам 5 09.09.2009 18:35