0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Определение и виды</a><ul><li><a>Особенности the maps</a></li>
1
<ul><li><a>Определение и виды</a><ul><li><a>Особенности the maps</a></li>
2
</ul></li>
2
</ul></li>
3
<li><a>Основные операции</a><ul><li><a>Создание</a></li>
3
<li><a>Основные операции</a><ul><li><a>Создание</a></li>
4
<li><a>Добавление (вставка) записей</a></li>
4
<li><a>Добавление (вставка) записей</a></li>
5
<li><a>Дублирование ключей</a></li>
5
<li><a>Дублирование ключей</a></li>
6
<li><a>Получение информации</a></li>
6
<li><a>Получение информации</a></li>
7
<li><a>Удаление элементов</a></li>
7
<li><a>Удаление элементов</a></li>
8
<li><a>Размеры</a></li>
8
<li><a>Размеры</a></li>
9
</ul></li>
9
</ul></li>
10
<li><a>Просмотр коллекций</a><ul><li><a>KeySet</a></li>
10
<li><a>Просмотр коллекций</a><ul><li><a>KeySet</a></li>
11
<li><a>The value и EntrySet</a></li>
11
<li><a>The value и EntrySet</a></li>
12
</ul></li>
12
</ul></li>
13
<li><a>Итерации</a><ul><li><a>Применение Foreach</a></li>
13
<li><a>Итерации</a><ul><li><a>Применение Foreach</a></li>
14
<li><a>Сортировка по ключу</a></li>
14
<li><a>Сортировка по ключу</a></li>
15
<li><a>По значению</a></li>
15
<li><a>По значению</a></li>
16
</ul></li>
16
</ul></li>
17
<li><a>Java 9</a></li>
17
<li><a>Java 9</a></li>
18
</ul><p>MAP - структура данных, включающая в себя набор пар "ключ-значение". Напоминает словарь, из-за чего соответствующий компонент часто так и называется. MAP - это еще и интерфейс. В стандартном JDK он поддерживает сразу несколько реализаций. Одна из них является более распространенной и называется Hashmap. Она будет рассмотрена более подробно.</p>
18
</ul><p>MAP - структура данных, включающая в себя набор пар "ключ-значение". Напоминает словарь, из-за чего соответствующий компонент часто так и называется. MAP - это еще и интерфейс. В стандартном JDK он поддерживает сразу несколько реализаций. Одна из них является более распространенной и называется Hashmap. Она будет рассмотрена более подробно.</p>
19
<h2>Определение и виды</h2>
19
<h2>Определение и виды</h2>
20
<p>The map in Java - это вершина иерархии Java Collection. Структура, которая включена в стандартный JDK, начиная с версии 1.2. Предоставляет программисту базовые методы для работы с данными, реализованными в качестве пар "ключ-значение". Функции интерфейса расширяются вместе с обновлениями и совершенствованием Java.</p>
20
<p>The map in Java - это вершина иерархии Java Collection. Структура, которая включена в стандартный JDK, начиная с версии 1.2. Предоставляет программисту базовые методы для работы с данными, реализованными в качестве пар "ключ-значение". Функции интерфейса расширяются вместе с обновлениями и совершенствованием Java.</p>
21
<p>Выше можно увидеть иерархию the maps. Среди реализаций этот компонент разработки выделяет:</p>
21
<p>Выше можно увидеть иерархию the maps. Среди реализаций этот компонент разработки выделяет:</p>
22
<ul><li>Hashmap;</li>
22
<ul><li>Hashmap;</li>
23
<li>LinkedHashMap;</li>
23
<li>LinkedHashMap;</li>
24
<li>TreeMap.</li>
24
<li>TreeMap.</li>
25
</ul><p>Первый вариант пользуется наибольшим применением. Он будет представлен в рассматриваемых далее примерах в подавляющем большинстве.</p>
25
</ul><p>Первый вариант пользуется наибольшим применением. Он будет представлен в рассматриваемых далее примерах в подавляющем большинстве.</p>
26
<p>Карты - структуры данных, необходимые для быстрого поиска. Информация будет храниться по типу "key - value". Каждый ключ в соответствующей подборке уникален. Каждый ключ полностью соответствует значению. Соответствующие пары "key - values" называются элементами карты.</p>
26
<p>Карты - структуры данных, необходимые для быстрого поиска. Информация будет храниться по типу "key - value". Каждый ключ в соответствующей подборке уникален. Каждый ключ полностью соответствует значению. Соответствующие пары "key - values" называются элементами карты.</p>
27
<p>The Java.util.MAP - это the interface, включающий в себя сигнатуры методов для вставки, извлечения, а также удаления.</p>
27
<p>The Java.util.MAP - это the interface, включающий в себя сигнатуры методов для вставки, извлечения, а также удаления.</p>
28
<h3>Особенности the maps</h3>
28
<h3>Особенности the maps</h3>
29
<p>Интерфейсы Map реализуются несколькими классами в Collections Framework. Каждый из них - это отдельная функциональность, а также безопасность потоков. Самый распространенный вариант уже был упомянут - HashMap. Он встречается в основной массе приложений, написанных на JDK.</p>
29
<p>Интерфейсы Map реализуются несколькими классами в Collections Framework. Каждый из них - это отдельная функциональность, а также безопасность потоков. Самый распространенный вариант уже был упомянут - HashMap. Он встречается в основной массе приложений, написанных на JDK.</p>
30
<p>Карты - единственная коллекция Collections Framework, которая не расширяет и не реализует непосредственно интерфейс коллекции. The Map не подойдет для контракта, потому что требует работы с парами, а не с отдельными значениями.</p>
30
<p>Карты - единственная коллекция Collections Framework, которая не расширяет и не реализует непосредственно интерфейс коллекции. The Map не подойдет для контракта, потому что требует работы с парами, а не с отдельными значениями.</p>
31
<h2>Основные операции</h2>
31
<h2>Основные операции</h2>
32
<p>Чтобы полноценно пользоваться коллекциями the map в Java, необходимо знать methods для реализации того или иного функционала. Далее предстоит изучить ключевые команды. Они помогут с дальнейшим освоением изучаемого компонента.</p>
32
<p>Чтобы полноценно пользоваться коллекциями the map в Java, необходимо знать methods для реализации того или иного функционала. Далее предстоит изучить ключевые команды. Они помогут с дальнейшим освоением изучаемого компонента.</p>
33
<h3>Создание</h3>
33
<h3>Создание</h3>
34
<p>Создание (create) подразумевает, что ключи и значения карты могут быть ссылками любого типа. Использовать примитивный тип данных из-за имеющихся ограничений не получится. Они напрямую связаны с разработкой дженериков.</p>
34
<p>Создание (create) подразумевает, что ключи и значения карты могут быть ссылками любого типа. Использовать примитивный тип данных из-за имеющихся ограничений не получится. Они напрямую связаны с разработкой дженериков.</p>
35
<p>The HashMap разрешает создание одного нулевого ключа (the key) и нескольких нулевых значений (values). Он не сохраняет порядок компонентов и не гарантирует, что он всегда будет неизменным.</p>
35
<p>The HashMap разрешает создание одного нулевого ключа (the key) и нескольких нулевых значений (values). Он не сохраняет порядок компонентов и не гарантирует, что он всегда будет неизменным.</p>
36
<p>Создание (creating) HashMap с целочисленными ключами и строковыми значениями осуществляется так:</p>
36
<p>Создание (creating) HashMap с целочисленными ключами и строковыми значениями осуществляется так:</p>
37
<p>Map<Integer, String> map = new HashMap<>();</p>
37
<p>Map<Integer, String> map = new HashMap<>();</p>
38
<p>Все методы (methods), представленные далее, подойдут для любой реализации the map из Collections Framework. Связано это с тем, что все карты реализуют maps interface.</p>
38
<p>Все методы (methods), представленные далее, подойдут для любой реализации the map из Collections Framework. Связано это с тем, что все карты реализуют maps interface.</p>
39
<h3>Добавление (вставка) записей</h3>
39
<h3>Добавление (вставка) записей</h3>
40
<p>Для добавления записей в карту используется метод put. Он поддерживает всего два параметра:</p>
40
<p>Для добавления записей в карту используется метод put. Он поддерживает всего два параметра:</p>
41
<ul><li>ключ;</li>
41
<ul><li>ключ;</li>
42
<li>значение.</li>
42
<li>значение.</li>
43
</ul><p>Далее некоторые методы будут изучены на наглядных примерах. В случае с put the mapping необходимо заполнить карту идентификаторами и именами:</p>
43
</ul><p>Далее некоторые методы будут изучены на наглядных примерах. В случае с put the mapping необходимо заполнить карту идентификаторами и именами:</p>
44
<p>map.put(1, "Petyr Baelish");</p>
44
<p>map.put(1, "Petyr Baelish");</p>
45
<p>map.put(2, "Sansa Stark");</p>
45
<p>map.put(2, "Sansa Stark");</p>
46
<p>map.put(3, "Jon Snow");</p>
46
<p>map.put(3, "Jon Snow");</p>
47
<p>map.put(4, "Jamie Lannister");</p>
47
<p>map.put(4, "Jamie Lannister");</p>
48
<p>Ниже - пример того, как соответствующий компонент выглядит при обработке предложенного фрагмента программного кода:</p>
48
<p>Ниже - пример того, как соответствующий компонент выглядит при обработке предложенного фрагмента программного кода:</p>
49
<p>Иногда необходимо добавить сразу несколько записей или объединить две карты. Put в этом случае не подойдет. Для выполнения соответствующих задач используется команда put all. Она будет копировать ссылки на записи от одной карты для непосредственного заполнения другой.</p>
49
<p>Иногда необходимо добавить сразу несколько записей или объединить две карты. Put в этом случае не подойдет. Для выполнения соответствующих задач используется команда put all. Она будет копировать ссылки на записи от одной карты для непосредственного заполнения другой.</p>
50
<h3>Дублирование ключей</h3>
50
<h3>Дублирование ключей</h3>
51
<p>The keys в картах не могут дублироваться. Если попытаться вставить уже существующий ключ, получится следующая ситуация:</p>
51
<p>The keys в картах не могут дублироваться. Если попытаться вставить уже существующий ключ, получится следующая ситуация:</p>
52
<p>map.put(4, "Daenerys Targaryen");</p>
52
<p>map.put(4, "Daenerys Targaryen");</p>
53
<p>Здесь метод put вернет предыдущее значение, если его хочется использовать. Если предыдущего значения не было, возвращается Null.</p>
53
<p>Здесь метод put вернет предыдущее значение, если его хочется использовать. Если предыдущего значения не было, возвращается Null.</p>
54
<p>Для проверки наличия ключа на создание (creating) используется логический метод containsKey:</p>
54
<p>Для проверки наличия ключа на создание (creating) используется логический метод containsKey:</p>
55
<p>if (map.containsKey(4)) {</p>
55
<p>if (map.containsKey(4)) {</p>
56
<p> throw new IllegalArgumentException("Unable to add character, duplicate id");</p>
56
<p> throw new IllegalArgumentException("Unable to add character, duplicate id");</p>
57
<p>}</p>
57
<p>}</p>
58
<p>В случае created values используется метод containsValue():</p>
58
<p>В случае created values используется метод containsValue():</p>
59
<p>boolean check = map.containsValue("Brienne of Tarth"); // false</p>
59
<p>boolean check = map.containsValue("Brienne of Tarth"); // false</p>
60
<p>Соответствующий прием позволяет проверить наличие в коллекции (словаре) того или иного значения.</p>
60
<p>Соответствующий прием позволяет проверить наличие в коллекции (словаре) того или иного значения.</p>
61
<h3>Получение информации</h3>
61
<h3>Получение информации</h3>
62
<p>В процессе работы с картами в Java иногда мы получаем ту или иную информацию. Для выполнения соответствующей операции используется отдельный the method. Он называется get.</p>
62
<p>В процессе работы с картами в Java иногда мы получаем ту или иную информацию. Для выполнения соответствующей операции используется отдельный the method. Он называется get.</p>
63
<p>String value = map.get(4); // Daenerys Targaryen</p>
63
<p>String value = map.get(4); // Daenerys Targaryen</p>
64
<p>Данный метод принимает ключ, а возвращает значение, которое связано с соответствующим the key. Если "параметры" отсутствуют, get позволит получить NULL.</p>
64
<p>Данный метод принимает ключ, а возвращает значение, которое связано с соответствующим the key. Если "параметры" отсутствуют, get позволит получить NULL.</p>
65
<h3>Удаление элементов</h3>
65
<h3>Удаление элементов</h3>
66
<p>Вместе с созданием (create) карты поддерживают удаление. Это еще одна "стандартная" операция, которая позволяет получить откорректированный словарь.</p>
66
<p>Вместе с созданием (create) карты поддерживают удаление. Это еще одна "стандартная" операция, которая позволяет получить откорректированный словарь.</p>
67
<p>Для удаления компонентов используется метод the remove. Он работает так:</p>
67
<p>Для удаления компонентов используется метод the remove. Он работает так:</p>
68
<ol><li>Принимает ключ в виде "входного" параметра.</li>
68
<ol><li>Принимает ключ в виде "входного" параметра.</li>
69
<li>Ищет запись, которую необходимо удалить.</li>
69
<li>Ищет запись, которую необходимо удалить.</li>
70
<li>Возвращает значение, связанное с удаленным компонентом. Если оно отсутствует, результатом выполнения операции будет NULL.</li>
70
<li>Возвращает значение, связанное с удаленным компонентом. Если оно отсутствует, результатом выполнения операции будет NULL.</li>
71
</ol><p>map.remove(3); // removes and returns "Jon Snow"</p>
71
</ol><p>map.remove(3); // removes and returns "Jon Snow"</p>
72
<p>map.remove(3); // removes nothing and returns null</p>
72
<p>map.remove(3); // removes nothing and returns null</p>
73
<p>Для того чтобы получить "очищенную" карту, может быть вызвана команда clear. Она представлена методом void. Ничего не возвращает.</p>
73
<p>Для того чтобы получить "очищенную" карту, может быть вызвана команда clear. Она представлена методом void. Ничего не возвращает.</p>
74
<p>Выше - наглядный пример (example) формы записи соответствующей команды.</p>
74
<p>Выше - наглядный пример (example) формы записи соответствующей команды.</p>
75
<h3>Размеры</h3>
75
<h3>Размеры</h3>
76
<p>Операция size вернет количество записей на карте:</p>
76
<p>Операция size вернет количество записей на карте:</p>
77
<p>int size = map.size();</p>
77
<p>int size = map.size();</p>
78
<p>При помощи isEmpty удастся вернуть логическое значение. Оно покажет, пуста ли используемая collection, или нет.</p>
78
<p>При помощи isEmpty удастся вернуть логическое значение. Оно покажет, пуста ли используемая collection, или нет.</p>
79
<p>boolean isEmpty = map.isEmpty();</p>
79
<p>boolean isEmpty = map.isEmpty();</p>
80
<p>Формат написания соответствующей операции. Этот фрагмент можно вставить в исходный код для проверки на пустоту.</p>
80
<p>Формат написания соответствующей операции. Этот фрагмент можно вставить в исходный код для проверки на пустоту.</p>
81
<h2>Просмотр коллекций</h2>
81
<h2>Просмотр коллекций</h2>
82
<p>The interfaces "МАП" предоставляют команды, помогающие просматривать collection. С их помощью удастся изучать карту с точки зрения типа коллекции. Соответствующие представления имеют единственный механизм перебора.</p>
82
<p>The interfaces "МАП" предоставляют команды, помогающие просматривать collection. С их помощью удастся изучать карту с точки зрения типа коллекции. Соответствующие представления имеют единственный механизм перебора.</p>
83
<p>Воспользоваться для просмотра collections рекомендуется такими операциями как:</p>
83
<p>Воспользоваться для просмотра collections рекомендуется такими операциями как:</p>
84
<ul><li>keySet - применяется для возврата набора ключей с карты;</li>
84
<ul><li>keySet - применяется для возврата набора ключей с карты;</li>
85
<li>values - возвращает коллекцию значений и "МАП";</li>
85
<li>values - возвращает коллекцию значений и "МАП";</li>
86
<li>entrySet - применяется для возврата набора объектов Map.Empty, которые реализованы в виде пары "ключ-значение" на карте.</li>
86
<li>entrySet - применяется для возврата набора объектов Map.Empty, которые реализованы в виде пары "ключ-значение" на карте.</li>
87
</ul><p>Стоит помнить, что просмотры поддерживаются используемой картой. Это значит, что любые изменения, внесенные в представление, обновляют "базовый" объект. Обратный принцип здесь тоже работает. Представления допускают удаление created a value and keys, но не вставку.</p>
87
</ul><p>Стоит помнить, что просмотры поддерживаются используемой картой. Это значит, что любые изменения, внесенные в представление, обновляют "базовый" объект. Обратный принцип здесь тоже работает. Представления допускают удаление created a value and keys, но не вставку.</p>
88
<h3>KeySet</h3>
88
<h3>KeySet</h3>
89
<p>KeySet используется для того, чтобы вернуть набор ключей, содержащихся в карте:</p>
89
<p>KeySet используется для того, чтобы вернуть набор ключей, содержащихся в карте:</p>
90
<p>Set<Integer> keys = map.keySet(); // [1, 2, 4]</p>
90
<p>Set<Integer> keys = map.keySet(); // [1, 2, 4]</p>
91
<p>Других предназначений команда не имеет.</p>
91
<p>Других предназначений команда не имеет.</p>
92
<h3>The value и EntrySet</h3>
92
<h3>The value и EntrySet</h3>
93
<p>Пользуясь просмотром the java util map, иногда необходимо вернуть the collection value, хранимых в карте:</p>
93
<p>Пользуясь просмотром the java util map, иногда необходимо вернуть the collection value, хранимых в карте:</p>
94
<p>Представленная команда не вернет всю коллекцию вместо набора. Связано это с тем, что параметры карты не обязательно являются уникальными. Набор в этом случае функционировать не будет.</p>
94
<p>Представленная команда не вернет всю коллекцию вместо набора. Связано это с тем, что параметры карты не обязательно являются уникальными. Набор в этом случае функционировать не будет.</p>
95
<p>При помощи операции entrySet разработчик сможет получить набор записей в the collection. Результатом станет набор объектов the Map.Entry. Объекты the Map.Entry представлены в виде пары "ключ-значение". Для соответствующих компонентов допускается использование таких команд как getKey и getValue.</p>
95
<p>При помощи операции entrySet разработчик сможет получить набор записей в the collection. Результатом станет набор объектов the Map.Entry. Объекты the Map.Entry представлены в виде пары "ключ-значение". Для соответствующих компонентов допускается использование таких команд как getKey и getValue.</p>
96
<p>EntrySet часто используется для формирования циклов.</p>
96
<p>EntrySet часто используется для формирования циклов.</p>
97
<h2>Итерации</h2>
97
<h2>Итерации</h2>
98
<p>Итерации по the mapping collections возможны различными способами. Далее будут представлены наиболее распространенные концепции и реализации.</p>
98
<p>Итерации по the mapping collections возможны различными способами. Далее будут представлены наиболее распространенные концепции и реализации.</p>
99
<p>Стоит обратить внимание на то, что циклы вызывают исключение the NullPointerException. Это произойдет, если попытаться перебрать нулевую карту.</p>
99
<p>Стоит обратить внимание на то, что циклы вызывают исключение the NullPointerException. Это произойдет, если попытаться перебрать нулевую карту.</p>
100
<h3>Применение Foreach</h3>
100
<h3>Применение Foreach</h3>
101
<p>Наиболее распространенный вариант итерации по the map - это использование foreach. Он предпочтителен для основной массы задач.</p>
101
<p>Наиболее распространенный вариант итерации по the map - это использование foreach. Он предпочтителен для основной массы задач.</p>
102
<p>При обработке соответствующего фрагмента разработчику будет предоставлен доступ не только к ключам, но и к значениям.</p>
102
<p>При обработке соответствующего фрагмента разработчику будет предоставлен доступ не только к ключам, но и к значениям.</p>
103
<p>Выше - наглядный пример использования лямбда-выражений в Java 8.</p>
103
<p>Выше - наглядный пример использования лямбда-выражений в Java 8.</p>
104
<h3>Сортировка по ключу</h3>
104
<h3>Сортировка по ключу</h3>
105
<p>Hashmap не позволяет сохранить порядок в своих записях. Ниже - пример, наглядно демонстрирующий соответствующую ситуацию:</p>
105
<p>Hashmap не позволяет сохранить порядок в своих записях. Ниже - пример, наглядно демонстрирующий соответствующую ситуацию:</p>
106
<p>После обработки кода содержимое the map будет выведено в консоль, но в случайном порядке:</p>
106
<p>После обработки кода содержимое the map будет выведено в консоль, но в случайном порядке:</p>
107
<p>При использовании TreeMap произойдет автоматическая сортировка по ключу. Вот так будет выглядеть преобразование HashMap в the ThreeMap:</p>
107
<p>При использовании TreeMap произойдет автоматическая сортировка по ключу. Вот так будет выглядеть преобразование HashMap в the ThreeMap:</p>
108
<p>Выше - пример реализации операции и результат, который будет выведен непосредственно на дисплей устройства. Такой подход - это сортировка по ключу.</p>
108
<p>Выше - пример реализации операции и результат, который будет выведен непосредственно на дисплей устройства. Такой подход - это сортировка по ключу.</p>
109
<h3>По значению</h3>
109
<h3>По значению</h3>
110
<p>Более сложный вариант осуществления итераций в картах - это сортировка содержимого по значениям. Ниже - фрагмент, на который можно опираться при реализации команды:</p>
110
<p>Более сложный вариант осуществления итераций в картах - это сортировка содержимого по значениям. Ниже - фрагмент, на который можно опираться при реализации команды:</p>
111
<p>Здесь:</p>
111
<p>Здесь:</p>
112
<ol><li>В строке 3 создается список именованных записей. Они включают в себя объекты the map.Entry из карты, в которую был передан метод.</li>
112
<ol><li>В строке 3 создается список именованных записей. Они включают в себя объекты the map.Entry из карты, в которую был передан метод.</li>
113
<li>Строки 5-10 используются вместе с Collections.sort(). В них реализован Comparator при помощи entry.getValue. Это необходимо для того, чтобы система понимала, как именно сравнивать записи. Они будут отсортированы по значению.</li>
113
<li>Строки 5-10 используются вместе с Collections.sort(). В них реализован Comparator при помощи entry.getValue. Это необходимо для того, чтобы система понимала, как именно сравнивать записи. Они будут отсортированы по значению.</li>
114
<li>В 12 строчке создается LinkedHashMap. Он представляет собой реализацию карты, которая сохраняет порядок вставки имеющихся записей.</li>
114
<li>В 12 строчке создается LinkedHashMap. Он представляет собой реализацию карты, которая сохраняет порядок вставки имеющихся записей.</li>
115
<li>Строки 14-16 дают возможность "перебрать" список и заполнить новую the map.</li>
115
<li>Строки 14-16 дают возможность "перебрать" список и заполнить новую the map.</li>
116
</ol><p>Выше - наглядный пример соответствующего варианта организации итераций в действии. Пользователи могут увидеть не только фрагмент кода, но и результат, выводимый на дисплее.</p>
116
</ol><p>Выше - наглядный пример соответствующего варианта организации итераций в действии. Пользователи могут увидеть не только фрагмент кода, но и результат, выводимый на дисплее.</p>
117
<p>Интерфейс the map в Java 9 поддерживает синтаксический сахар для неизменных карт. Под ними подразумевается компонент, который не может изменяться. В такой карте не поддерживаются ни команды удаления, ни добавления новых записей.</p>
117
<p>Интерфейс the map в Java 9 поддерживает синтаксический сахар для неизменных карт. Под ними подразумевается компонент, который не может изменяться. В такой карте не поддерживаются ни команды удаления, ни добавления новых записей.</p>
118
<p>Выше можно увидеть пример создания такого объекта в Java 8. Java 9 предлагает статический фабричный метод Map.of. Он нужен для упрощения создания неизменных карт.</p>
118
<p>Выше можно увидеть пример создания такого объекта в Java 8. Java 9 предлагает статический фабричный метод Map.of. Он нужен для упрощения создания неизменных карт.</p>
119
<p>На the map поддерживаются методы добавления и удаления записей. При их вызове появляется исключение UnsupportedOperationException.</p>
119
<p>На the map поддерживаются методы добавления и удаления записей. При их вызове появляется исключение UnsupportedOperationException.</p>
120
<p>Теперь основы the mapping в Java изучены в общих чертах. Здесь можно увидеть наглядный пример того, как реализована работа с картами. Быстрее и лучше изучить соответствующий компонент и иные<a>инструменты программирования на Java помогут специальные дистанционные компьютерные курсы</a>.</p>
120
<p>Теперь основы the mapping в Java изучены в общих чертах. Здесь можно увидеть наглядный пример того, как реализована работа с картами. Быстрее и лучше изучить соответствующий компонент и иные<a>инструменты программирования на Java помогут специальные дистанционные компьютерные курсы</a>.</p>
121
121