| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Ассоциативный двумерный массив |
| Автор: Валерия 26.11.2014, 02:05 | ||||
Как правильно написать такое? Я знаю что есть вариант написать вот так:
Но не прикольно каждый раз создавать новый HashMap для каждого значения Можно ли как-то это дело простым образом инициализировать? |
| Автор: sQu1rr 26.11.2014, 02:42 | ||||||
| Есть как минимум три способа для автоматической инициализации мапа (не совсем точно отвечает на ваш вопрос, но доработать можно) 1. Вынесите в функцию и которая делает put и возвращает объект
2. Анонимный класс, но по моему слишком неоправданно
3. https://code.google.com/p/guava-libraries/
|
| Автор: Stolzen 26.11.2014, 10:09 |
Можно использовать Table из вышеупомянутой гуавы |
| Автор: Валерия 27.11.2014, 02:11 |
| Всем спасибо Но мне нужно стандартными средствами Анонимный класс отлично подошел |
| Автор: sQu1rr 27.11.2014, 12:40 |
А я бы все таки использовал функцию. Анониманый класс может сильно навредить, как производительности, так и читаемости кода |
| Автор: LSD 27.11.2014, 14:58 |
Чем это? |
| Автор: sQu1rr 27.11.2014, 15:53 |
Может тут ключевое слово. Создается внутренний анонимный класс, который держит указатель на внешний (Hashmap) класс. То есть еще один уровень индирекции, и кушается больше памяти, нет? Если таких объектов наклепать изрядно, то мусороуборке придется больше памяти очищать |
| Автор: sQu1rr 27.11.2014, 19:29 |
Кол-во какраз в 2 раза больше будет. Внутренний класс + внешний, вместо одного внешнего. Да перестарался со словом сильно, извиняюсь |
| Автор: Валерия 27.11.2014, 20:11 |
| Просто guava это не стандартные средства, а мне нужно сделать максимально стандартными средствами Я просто сейчас учу Java и пишу на ней все те вещи которые мне нужны были в других ЯП, и вот ассоциативные массивы сделаны очень не удобно, по сравнению с php или perl, столько лишнего всего... |
| Автор: LSD 28.11.2014, 13:59 | ||
Не понял откуда там 2 объекта. Вариант 1: 1 - объект HashMap Вариант 2 1 - объект MyClass$1 extends HashMap |
| Автор: sQu1rr 28.11.2014, 14:29 |
| А может я и туплю. нужно погуглить |
| Автор: sQu1rr 28.11.2014, 14:53 | ||
| Вообщем. Нормализую ка я свою логику и попробую объяснится нормально, что я имел ввиду Если вы делаете анонимный класс, он, и правда будет просто extend от родительского, НО будет содержать в себе ссылку на внешний класс (то есть тот класс в котором вы этот анонимный класс и создаете), а это значит, что этот внешний класс будет жить пока не умрет анонимный класс.
Вернется анонимный экземпляр OtherClass который будет содержать ссылку на someClass, и если someClass выпадет из области видимости раньше чем anonOtherClass, то он не будет удалятся мусороуборкой, пока anonOtherClass не удалится. Вот. А про кол-во объектов я имел "за раз". Ну вы поняли. Я очень хорошо в объяснениях я знаю |
| Автор: LSD 28.11.2014, 16:04 | ||||
Если анонимный внутренний класс создается в статическом контексте, то он сам будет статическим и никаких ссылок на родительский объект содержать не будет.
(хотя нас и пугают, что могут это убрать). |