Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ассоциативный двумерный массив 
V
    Опции темы
Валерия
Дата 26.11.2014, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Код

HashMap<String, HashMap<String, String>> people = new HashMap<String, HashMap<String, String>>();
people.put("Vasia", new HashMap<>(Arrays.asList("Pupkin", "Designer")));
people.put("Petya", new HashMap<>(Arrays.asList("Ivanov", "Developer")));

Как правильно написать такое?
Я знаю что есть вариант написать вот так:
Код
HashMap<String, HashMap<String, String>> people = new HashMap<String, HashMap<String, String>>();

HashMap<String, String> my1 = new HashMap<String, String>();
my1.put("Pupkin", "Designer");

people.put("Vasia", my1);
        
HashMap<String, String> my2 = new HashMap<String, String>();
my2.put("Ivanov", "Developer");
people.put("Petya", my2);

Но не прикольно каждый раз создавать новый HashMap для каждого значения
Можно ли как-то это дело простым образом инициализировать?
PM MAIL   Вверх
sQu1rr
Дата 26.11.2014, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Есть как минимум три способа для автоматической инициализации мапа (не совсем точно отвечает на ваш вопрос, но доработать можно)
1. Вынесите в функцию и которая делает put и возвращает объект
Код

// ну тут ясно

2. Анонимный класс, но по моему слишком неоправданно
Код

HashMap<String, String > map = new HashMap<String, String>(){{
    put("Pupkin","Designer");
}};

3. guava
Код

Map<String,String> map = ImmutableMap.of("Pupkin", "Designer", "Ivanov", "Developer");

PM MAIL Skype GTalk   Вверх
Stolzen
Дата 26.11.2014, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Цитата(Валерия @  26.11.2014,  03:05 Найти цитируемый пост)
Можно ли как-то это дело простым образом инициализировать? 

Можно использовать Table из вышеупомянутой гуавы


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Валерия
Дата 27.11.2014, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Всем спасибо smile
Но мне нужно стандартными средствами
Анонимный класс отлично подошел

Это сообщение отредактировал(а) Валерия - 27.11.2014, 02:13
PM MAIL   Вверх
sQu1rr
Дата 27.11.2014, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Цитата(Валерия @  27.11.2014,  00:11 Найти цитируемый пост)
Анонимный класс отлично подошел

А я бы все таки использовал функцию. Анониманый класс может сильно навредить, как производительности, так и читаемости кода
PM MAIL Skype GTalk   Вверх
LSD
Дата 27.11.2014, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(sQu1rr @  27.11.2014,  13:40 Найти цитируемый пост)
Анониманый класс может сильно навредить, как производительности

Чем это?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
sQu1rr
Дата 27.11.2014, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Цитата(LSD @  27.11.2014,  12:58 Найти цитируемый пост)
Чем это? 

Может тут ключевое слово. Создается внутренний анонимный класс, который держит указатель на внешний (Hashmap) класс. То есть еще один уровень индирекции, и кушается больше памяти, нет? Если таких объектов наклепать изрядно, то мусороуборке придется больше памяти очищать
PM MAIL Skype GTalk   Вверх
LSD
Дата 27.11.2014, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(sQu1rr @  27.11.2014,  16:53 Найти цитируемый пост)
Может тут ключевое слово. Создается внутренний анонимный класс, который держит указатель на внешний (Hashmap) класс. То есть еще один уровень индирекции, и кушается больше памяти, нет? Если таких объектов наклепать изрядно, то мусороуборке придется больше памяти очищать 

Количество объектов подлежащих сборке это не изменит. Да и если бы изменило, то значительного влияния на производительность это не окажет.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
sQu1rr
Дата 27.11.2014, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Цитата(LSD @  27.11.2014,  14:28 Найти цитируемый пост)
Количество объектов подлежащих сборке это не изменит

Кол-во какраз в 2 раза больше будет. Внутренний класс + внешний, вместо одного внешнего.

Цитата(LSD @  27.11.2014,  14:28 Найти цитируемый пост)
значительного влияния на производительность это не окажет

Цитата(sQu1rr @  27.11.2014,  13:53 Найти цитируемый пост)
Может тут ключевое слово

Да перестарался со словом сильно, извиняюсь
PM MAIL Skype GTalk   Вверх
Валерия
Дата 27.11.2014, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Просто guava это не стандартные средства, а мне нужно сделать максимально стандартными средствами
Я просто сейчас учу Java и пишу на ней все те вещи которые мне нужны были в других ЯП, и вот ассоциативные массивы сделаны очень не удобно, по сравнению с php или perl, столько лишнего всего...
PM MAIL   Вверх
LSD
Дата 28.11.2014, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(sQu1rr @  27.11.2014,  20:29 Найти цитируемый пост)
Кол-во какраз в 2 раза больше будет. Внутренний класс + внешний, вместо одного внешнего.

Не понял откуда там 2 объекта.

Вариант 1:
Цитата(sQu1rr @  26.11.2014,  03:42 Найти цитируемый пост)
Вынесите в функцию и которая делает put и возвращает объект

1 - объект HashMap

Вариант 2
Цитата(sQu1rr @  26.11.2014,  03:42 Найти цитируемый пост)
Анонимный класс

1 - объект MyClass$1 extends HashMap


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
sQu1rr
Дата 28.11.2014, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



А может я и туплю. нужно погуглить

Это сообщение отредактировал(а) sQu1rr - 28.11.2014, 14:36
PM MAIL Skype GTalk   Вверх
sQu1rr
Дата 28.11.2014, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Вообщем. Нормализую ка я свою логику и попробую объяснится нормально, что я имел ввиду

Если вы делаете анонимный класс, он, и правда будет просто extend от родительского, НО будет содержать в себе ссылку на внешний класс (то есть тот класс в котором вы этот анонимный класс и создаете), а это значит, что этот внешний класс будет жить пока не умрет анонимный класс.
Код

class SomeClass {
    public returnOtherClass() {
        return OtherClass() { ... };
    }
}

Вернется анонимный экземпляр OtherClass который будет содержать ссылку на someClass, и если someClass выпадет из области видимости раньше чем anonOtherClass, то он не будет удалятся мусороуборкой, пока anonOtherClass не удалится. Вот. А про кол-во объектов я имел "за раз". Ну вы поняли.

Я очень хорошо в объяснениях я знаю
PM MAIL Skype GTalk   Вверх
LSD
Дата 28.11.2014, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(sQu1rr @  28.11.2014,  15:53 Найти цитируемый пост)
Если вы делаете анонимный класс, он, и правда будет просто extend от родительского, НО будет содержать в себе ссылку на внешний класс

Если анонимный внутренний класс создается в статическом контексте, то он сам будет статическим и никаких ссылок на родительский объект содержать не будет.
Код

    public static void main(String[] args) throws Exception {
        Map<Integer, String> map = new HashMap<Integer, String>() {{
            put(1, "A");
            put(2, "B");
            put(3, "C");
        }};
        System.out.println(map);
    }

(хотя нас и пугают, что могут это убрать).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1662 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.