java map interface tutorial with implementation examples
Цей всеосяжний підручник з карти Java розкриває способи створення, ініціалізації та ітерації за допомогою Карт. Ви також дізнаєтесь про методи методів та приклади реалізації:
Ви познайомитесь з основами інтерфейсу карти, методами, що підтримуються інтерфейсом карти, та іншими конкретними термінами, пов’язаними з інтерфейсом карти.
Колекція карт у Java - це колекція, яка відображає ключ до значення. Це колекція, що складається з ключів і значень. Кожен запис на карті складається з ключа з відповідним значенням. Клавіші унікальні на картах. Карти можуть використовуватися зазвичай, коли нам потрібно змінити колекцію на основі значення ключа.
=> Перевірте ВСІ підручники Java тут.
Що ви дізнаєтесь:
- Карти в Java
- Методи картографування
- Реалізація Java Map
- Висновок
Карти в Java
Карта в Java є частиною інтерфейсу java.util.map. Інтерфейс карт не є частиною інтерфейсу колекції, і саме тому карти відрізняються від інших колекцій.
Загальна ієрархія інтерфейсу карти наведена нижче.
Як показано вище, є два інтерфейси для реалізації map, тобто інтерфейс map і sortedMap інтерфейс. Існує три класи, а саме HashMap, TreeMap та LinkedHashMap.
Ці типи карт описані нижче:
Клас | Опис | |
---|---|---|
видалити | V видалити (клавіша об'єкта) | Видаліть запис на карті для даного ключа |
LinkedHashMap | Розширюється з класу HashMap. Ця карта підтримує порядок вставки | |
HashMap | Впровадити інтерфейс карти. HashMap не підтримує жодного порядку. | |
TreeMap | Реалізує як інтерфейс map, так і sortedMap. TreeMap підтримує порядок зростання. |
Варто пам’ятати про карти.
- На картах кожна клавіша може зіставити максимум одне значення. Крім того, на картах не може бути дублікатів ключів.
- Реалізації карт, такі як HashMap та LinkedHashMap, дозволяють мати нульові значення та нульові значення. Однак TreeMap цього не дозволяє.
- Карту неможливо пройти таким, як вона є. Отже, для обходу його потрібно перетворити на встановити за допомогою методу keyset () або entrySet ().
Створіть карту на Java
Для створення карти на Java спочатку ми повинні включити інтерфейс у нашу програму. Ми можемо використовувати одне з наступних тверджень у програмі для імпорту функціональних можливостей карти.
import java.util.*; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.TreeMap;
Нам потрібно створити конкретну реалізацію карти, оскільки вона є інтерфейсом.
Наступні твердження створюють карту на Java.
Map hash_map = new HashMap(); Map tree_map = new TreeMap();
Наведені вище твердження дозволять створити карти зі специфікаціями за замовчуванням.
Ми також можемо створювати загальні карти із зазначенням типів як для ключа, так і для значення.
Map myMap = new HashMap();
Вищезазначене значення буде мати ключі типу string та об’єкти.
Ініціалізуйте карту в Java
Його можна ініціалізувати, використовуючи такі методи:
# 1) Використання колекцій
Клас Java Collections має заводські методи, які можна використовувати для ініціалізації колекцій, включаючи карти.
Деякі методи, що використовуються для ініціалізації карти, такі:
(1) Колекції.EmptyMap ()
Collections.EmptyMap () повертає пусту серіалізуючу та незмінну карту. Наприклад, наступний рядок коду,
Map myMap = Collections.EMPTY_MAP;
Це створить порожню карту. Вищевказаний метод може видавати 'попередження про неперевірене призначення', і, отже, ми також можемо використовувати типозахисну форму наступним чином.
Map myMap = Collections.emptyMap ();
(2) Collections.unModifiableMap ()
Метод unModifiableMap () приймає іншу карту як аргумент і створює немодифікований вигляд вихідної карти.
Map myMap = Collections.EMPTY_MAP; Map map_unmodifiable = Collections.unmodifiableMap (myMap);
(3) Collections.singletonMap ()
Клас колекцій також надає фабричний метод ‘singletonMap ()’, який створює незмінну мапу singleton, що має лише один запис.
Map singleton_map = Collections.singletonMap('CHN', 'Beijing');
# 2) Використання Java 8
Ми можемо отримати потік даних із Java 8 потокових методів API та побудувати карти за допомогою Collectors.
Деякі з методів побудови карт:
(1) Collectors.toMap ()
Ми збираємо потік, а потім використовуємо метод Collectors.toMap () для побудови карти.
Map map = Stream.of(new String()(){{'USA', 'Washington'}, {'United Kingdom', 'London'} }).collect(Collectors.toMap(p -> p(0), p -> p(1)));
Наведене вище твердження створює карту з потоку Java 8.
(2) Колекціонери.collectingAndThen ()
У цьому ми адаптуємо метод toMap (), що дозволяє колектору створювати незмінну карту за допомогою методу колекціонування AndThen ().
Map immutableMap = Stream.of(new String()(){ {'USA', 'Washington'}, {'United Kingdom', 'London”} }).collect(Collectors.collectingAndThen(Collectors.toMap(p -> p (0), p -> p(1)), Collections::unmodifiableMap));
# 3) Використання методу put інтерфейсу Map
Метод put () інтерфейсу карти може бути використаний для присвоєння початкових значень картам.
# 4) Використання подвійної фігурної дужки
Методика “подвійної фігурної дужки” створює внутрішній клас. Цей клас є анонімним і містить в собі ініціалізатор примірника. Це не найкраща техніка, і її слід уникати, оскільки це може призвести до витоків пам'яті або проблем із серіалізацією.
У наведеній нижче програмі показані різні методи ініціалізації карти, обговорені вище.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //using Collections //create an empty map Map emptymap = Collections.EMPTY_MAP; //create unmodifiable map using Collections Map unmodifiableMap = Collections.unmodifiableMap(emptymap); System.out.println('unmodifiableMap map values:' + unmodifiableMap); //singleton map Map singleton_map = Collections.singletonMap(10, ' TEN'); System.out.println('
singleton_map Map values:' + singleton_map); //using Java 8 //1. toMap method of collectors class Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); System.out.println('
map_cities values: ' + map_cities); //2. collectingAndThen method Map capitals_Map = Stream.of(new String()(){ {'MAH', 'Mumbai'}, {'GOA', 'Panaji'}, {'KAR', 'Bangaluru'} }).collect(Collectors.collectingAndThen (Collectors.toMap(p -> p(0), p -> p(1)), Collections::unmodifiableMap)); System.out.println('
capitals_Map values: ' + capitals_Map); //double brace initialization Map country_map = new HashMap(); country_map.put('USA', 'Washington'); country_map.put('UK', 'London'); country_map.put('IND', 'Delhi'); country_map.put('GER', 'Berlin'); System.out.println('
Map values:' + country_map); } }
Вихід:
unmodifiableMap значення карти: {}
singleton_map Значення карти: {10 = TEN}
Значення map_cities: {CH = Ченнаї, DL = Нью-Делі, MH = Мумбаї}
capitals_Map значення: {MAH = Mumbai, GOA = Panaji, KAR = Bangaluru}
Картографічні значення: {США = Вашингтон, GER = Берлін, Великобританія = Лондон, IND = Делі}
Переглядайте карту в Java та друкуйте карту
Ми можемо пройти карту точно так само, як і інші колекції. На додаток до обходу записів на карті, ми також можемо обходити лише ключі або лише значення на карті. Зверніть увагу, що для обходу карти її потрібно перетворити на першу.
Наступні методи використовуються для обходу записів на карті.
Використання Entre Iterator
У цьому методі ми отримуємо ітератор запису із набору записів. Потім, використовуючи методи getKey та getValue, ми отримуємо пару ключ-значення для кожного запису на карті.
Наступна програма показує використання ітератора запису.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //use toMap method of collectors class to populate the map Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); //transform map to set Set entries = map_cities.entrySet(); //declare an iterator Iterator iterator = entries.iterator(); System.out.println('The map entries are:'); System.out.println(' KEY VALUE'); //iterate and print key and value pairs. while(iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(' ' + entry.getKey() + ' ' +entry.getValue()); } } }
Вихід:
Записи на карті:
КЛЮЧОВА ЦІННІСТЬ
CH Ченнаї
DL Нью-Делі
MH Мумбаї
У наведеній вище програмі ми отримуємо ітератор запису з карти за допомогою методу entrySet. Потім ми обходимо карту за допомогою методу hasNext () ітератора введення і друкуємо пару ключ-значення.
Використання запису для кожного циклу
Тут ми обходимо entrySet, використовуючи для кожного циклу, і реалізація показана нижче.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //use toMap method of collectors class to populate the map Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); System.out.println('The map entries are:'); System.out.println(' KEY VALUE'); //iterate using for each over entry set and print key and value pairs. for(Map.Entry entry : map_cities.entrySet()){ System.out.println(' ' + entry.getKey() + ' ' +entry.getValue()); } } }
Вихід:
Записи на карті:
КЛЮЧОВА ЦІННІСТЬ
CH Ченнаї
DL Нью-Делі
MH Мумбаї
Методи картографування
Інтерфейс карти в Java підтримує різні операції, подібні до тих, що підтримуються іншими колекціями. У цьому розділі ми обговоримо різні методи, що надаються Map API в Java. Оскільки сфера дії цього підручника обмежена введенням інтерфейсу карти загалом, ми не будемо описувати ці методи.
Ми детально обговоримо ці методи під час обговорення класів інтерфейсу карт.
У наведеній нижче таблиці перераховані всі методи, передбачені map map.
Назва методу | Метод-прототип | Опис |
---|---|---|
отримати | V get (Ключ об'єкта) | Повертає об'єкт або значення для даного ключа |
поставити | V put (ключ об'єкта, значення об'єкта) | Вставте на карту запис ключ-значення |
putAll | void putAll (карта мапи) | Вставте на карту задані записи на карті. Іншими словами, копіює або клонує карту. |
keySet | Встановити keySet () | Повертає встановлений вигляд карти. |
entrySet | Встановити | Повертає встановлення подання для даної карти |
значення | Значення колекції () | Повертає подання колекції значень на карті. |
розмір | розмір int () | Повертає кількість записів на карті |
ясно | void clear () | Очищає карту |
пусто | логічний isEmpty () | Перевіряє, чи карта порожня, і повертає true, якщо так. |
містить значення | boolean containsValue (значення об'єкта) | Повертає true, якщо карта містить значення, рівне заданому значенню |
міститьКлюч | boolean containsKey (Ключ об'єкта) | Повертає true, якщо заданий ключ існує на карті |
дорівнює | логічне значення дорівнює (Об'єкт o) | Порівнює вказаний об'єкт o з картою |
hashCode | int hashCode () | повертає хеш-код для карти |
для кожного | void forEach (дія BiConsumer) | Виконує задану дію для кожного запису на карті |
getOrDefault | V getOrDefault (Ключ об’єкта, V defaultValue) | Повертає вказане значення для даного ключа або значення за замовчуванням, якщо ключа немає |
видалити | логічне видалення (ключ об'єкта, значення об'єкта) | Видаляє вказані ключі та значення |
замінити | Заміна V (клавіша K, значення V) | Замінює даний ключ на вказане значення |
замінити | логічна заміна (клавіша K, V oldValue, V newValue) | Замінює старе значення новим значенням для даного ключа |
replaceAll | void replaceAll (функція BiFunction) | Викликає задану функцію для заміни всіх записів на карті |
putIfAbsent | V putIfAbsent (K key, V value) | Вставляє заданий ключ, значення, лише якщо його ще немає |
обчислити | V обчислення (клавіша K, функція переназначення BiFunction) | Обчислює зіставлення для вказаного ключа та значення з урахуванням функції відображення. |
computeIfAbsent | V computeIfAbsent (клавіша K, функція відображення функції) | Обчисліть значення для даного ключа за допомогою функції відображення, якщо воно ще не присутнє. |
computeIfPresent | V computeIfPresent (клавіша K, BiFunction remappingFunction) | Обчислює нове відображення для даного ключа із заданою функцією перепризначення, якщо значення ключа вже є |
піти | Злиття V (клавіша K, значення V, BiFunction remappingFunction) | Пов’язує даний ключ зі значенням, якщо воно ще не пов’язане або пов’язане з нульовим значенням. |
Всі перераховані вище методи підтримуються інтерфейсом карти. Зверніть увагу, що способи, які виглядають затіненими, - це нові методи, включені в Java 8.
Реалізація Java Map
Наступна програма реалізує приклад карти в Java. Тут ми використовуємо більшість методів, розглянутих вище.
Приклад демонструє різні операції отримання, путу та набору операцій.
import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Main { public static void main(String() args) { //create a map Map country_map = new HashMap(); //assign values to the map country_map.put('IND', 'India'); country_map.put('SL', 'Srilanka'); country_map.put('CHN', 'China'); country_map.put('KOR', 'Korea'); country_map.put(null, 'Z'); // null key country_map.put('XX', null); // null value String value = country_map.get('CHN'); // get System.out.println('Key = CHN, Value : ' + value); value = country_map.getOrDefault('XX', 'Default Value'); //getOrDefault System.out.println('
Key = XX, Value : ' + value); boolean keyExists = country_map.containsKey(null); //containsKey boolean valueExists = country_map.containsValue('Z'); //containsValue System.out.println('
null keyExists : ' + keyExists + ', null valueExists= ' + valueExists); Set entrySet = country_map.entrySet(); //entrySet System.out.println('
entry set for the country_map: ' + entrySet); System.out.println('
Size of country_map : ' + country_map.size()); //size Map data_map = new HashMap(); data_map.putAll(country_map); //putAll System.out.println('
data_map mapped to country_map : ' + data_map); String nullKeyValue = data_map.remove(null); //remove System.out.println('
null key value for data_map : ' + nullKeyValue); System.out.println('
data_map after removing null key = ' + data_map); Set keySet = country_map.keySet(); //keySet System.out.println('
data map keys : ' + keySet); Collection values = country_map.values(); //values System.out.println('
data map values : ' + values); country_map.clear(); //clear System.out.println('
data map after clear operation, is empty :' + country_map.isEmpty()); } }
Вихід:
Ключ = CHN, значення: Китай
Ключ = XX, значення: нуль
null keyExists: true, null valueExists = true
запис набору для країни_карта: (null = Z, XX = null, CHN = Китай, SL = Шріланка, IND = Індія, KOR = Корея)
Розмір country_map: 6
data_map зіставлена з mapom країни: {null = Z, XX = null, CHN = Китай, SL = Srilanka, IND = Індія, KOR = Коре
до}
нульове значення ключа для data_map: Z
data_map після видалення нульового ключа = {XX = null, CHN = Китай, SL = Шріланка, IND = Індія, KOR = Корея}
ключі карти даних: (нуль, XX, CHN, SL, IND, KOR)
значення карт даних: (Z, нуль, Китай, Шріланка, Індія, Корея)
карта даних після чіткої роботи порожня: true
Сортування карти в Java
Оскільки карта складається з пар ключ-значення, ми можемо сортувати карту за ключами або значеннями.
У цьому розділі ми відсортуємо карту як за ключами, так і за значеннями.
Сортувати за ключем
Для сортування карти за клавішами ми можемо використовувати деревоподібну карту. Карта дерева сортує ключі автоматично. Наведена нижче програма Java перетворює карту у деревоподібну карту та відображає відсортовані ключі.
import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String() args) { //declare and initialize a map Map country_map = new HashMap(); country_map.put('I', 'India'); country_map.put('C', 'China'); country_map.put('A', 'America'); country_map.put('D', 'Denmark'); country_map.put('X', 'Hongkong'); //print original map System.out.println('Original Unsorted Map: '); display_map(country_map); System.out.println('
Map sorted by Key: '); //convert map to treemap and display it in which keys are auto sorted Map treecountry = new TreeMap(country_map); display_map(treecountry); } public static void display_map(Map map) { //obtain entry iterator and display key value pairs of map for (Map.Entry entry : map.entrySet()) { System.out.println(' ' + entry.getKey() + ' ' + entry.getValue()); } } }
Вихід:
Оригінальна несортована карта:
Америка
С Китай
D Данія
X Гонконг
I Індія
Карта сортується за ключем:
Америка
С Китай
D Данія
I Індія
X Гонконг
Вищевказана програма створює карту, що складається з єдиного алфавітного коду як ключів та назв країн як значень. Спочатку ми відображаємо оригінальну карту, яка не сортується. Потім ми перетворюємо карту в деревоподібну карту, яка автоматично сортує ключі. Нарешті, ми відображаємо відсортовану карту дерева на клавішах.
Сортувати за значенням
Щоб відсортувати карту на основі значень, спочатку ми перетворюємо карту в список. Потім ми сортуємо цей список за допомогою методу Collections.sort (), який використовує компаратор для порівняння значень та упорядкування їх у певному порядку.
Після того, як список відсортовано, зв’язані записи списку знову копіюються на карту, яка дає нам відсортовану карту.
Наступна програма Java демонструє сортування карти на основі значення. Програма використовує LinkedHashMap, який передається функції сортування. У функції сортування він перетворюється у зв’язаний список і сортується. Після сортування він перетворюється назад у LinkedHashMap.
де я можу знайти свій ключ безпеки мережі
import java.util.*; public class Main { public static void main(String() args) { //define and initialize a map LinkedHashMap capitals_map = new LinkedHashMap(); capitals_map.put('NEP', 'Kathmandu'); capitals_map.put('IND', 'New Delhi'); capitals_map.put('USA', 'Washington'); capitals_map.put('UK', 'London'); capitals_map.put('AUS', 'Canberra'); //print original map System.out.println('Original unsorted map: '); System.out.println(capitals_map); //call sortMap method Map sorted_Map = sortMap(capitals_map); //print the sorted map System.out.println('
Map sorted on value : '); System.out.println(' Key Value '); for (Map.Entry entry : sorted_Map.entrySet()) { System.out.println(' ' + entry.getKey()+ ' ' + entry.getValue()); } } public static LinkedHashMap sortMap(LinkedHashMap linked_map) { //create a linkedlist from LinkedHashMap List capital_List = new LinkedList(linked_map.entrySet()); //sort the LinkedList Collections.sort(capital_List, (o1, o2) -> o1.getValue().compareTo(o2.getValue())); //Create LinkedHashMap from linkedlist and return it LinkedHashMap finalMap = new LinkedHashMap(); for (Map.Entry entry : capital_List) { finalMap.put(entry.getKey(), entry.getValue()); } return finalMap; } }
Вихід:
Оригінальна невідсортована карта:
{NEP = Катманду, IND = Нью-Делі, США = Вашингтон, Великобританія = Лондон, AUS = Канберра
Карта відсортована за значенням:
Ключове значення
ІЗ Канберри
НЕП Катманду
Великобританія Лондон
IND Нью-Делі
США Вашингтон
Одночасна карта в Java
ConcurrentMap - це інтерфейс, який успадковується від інтерфейсу java.util.map. Інтерфейс concurrentMap вперше був представлений в JDK 1.5 і надає карту, яка обробляє паралельний доступ.
Інтерфейс concurrentMap є частиною пакету java.util.concurrent.
Наступна програма Java демонструє паралельну карту в Java.
import java.util.concurrent.*; class Main { public static void main(String() args) { //create and initialize concurrentHashMap ConcurrentHashMap m = new ConcurrentHashMap(); m.put(100, 'Red'); m.put(101, 'Green'); m.put(102, 'Blue'); System.out.println('
Initial Concurrent Map : ' + m); //add a key using putIfAbsent method; key=103 is absent so its added m.putIfAbsent(103, 'Purple'); System.out.println('
After adding absent key 103 : ' + m); m.remove(101, 'Green'); // remove key = 101 System.out.println('
Concurrent Map after removing 101:' + m); m.putIfAbsent(101, 'Brown'); // again add key = 101 since its absent System.out.println('
Add absent key 101:' + m); m.replace(101, 'Brown', 'Green'); // replace value for key = 101 with 'Green' System.out.println('
Replace value at key 101:' + m); } } import java.util.concurrent.*; class Main { public static void main(String() args) { //create and initialize concurrentHashMap ConcurrentHashMap m = new ConcurrentHashMap(); m.put(100, 'Red'); m.put(101, 'Green'); m.put(102, 'Blue'); System.out.println('
Initial Concurrent Map : ' + m); //add a key using putIfAbsent method; key=103 is absent so its added m.putIfAbsent(103, 'Purple'); System.out.println('
After adding absent key 103 : ' + m); m.remove(101, 'Green'); // remove key = 101 System.out.println('
Concurrent Map after removing 101:' + m); m.putIfAbsent(101, 'Brown'); // again add key = 101 since its absent System.out.println('
Add absent key 101:' + m); m.replace(101, 'Brown', 'Green'); // replace value for key = 101 with 'Green' System.out.println('
Replace value at key 101:' + m); } }
Вихід:
Початкова паралельна карта: {100 = червона, 101 = зелена, 102 = синя}
Після додавання відсутнього ключа 103: {100 = червоний, 101 = зелений, 102 = синій, 103 = фіолетовий}
Одночасна карта після видалення 101: {100 = червоний, 102 = синій, 103 = фіолетовий}
Додайте відсутній ключ 101: {100 = червоний, 101 = коричневий, 102 = синій, 103 = фіолетовий}
Замінити значення за ключем 101: {100 = червоний, 101 = зелений, 102 = синій, 103 = фіолетовий}
Синхронізована карта в Java
Синхронізована карта - це карта, яка є безпечною для потоків і підтримується даною картою. У Java синхронізована карта отримується за допомогою методу synchronizedMap () класу java.util.Collections. Цей метод повертає синхронізовану карту для даної карти.
Ця повернута синхронізована карта використовується для доступу до резервної карти для отримання послідовного доступу.
Загальним оголошенням методу synchronizedMap () є:
public static Map synchronizedMap(Map m)
де m => - підкріплена карта.
Як уже зазначалося, цей метод повертає синхронізований вигляд карти m.
Наведена нижче програма Java є прикладом синхронізованої карти.
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a map Map int_map = new HashMap(); int_map.put(1, 10); int_map.put(2, 20); int_map.put(3, 30); int_map.put(4, 40); int_map.put(5, 50); //print the map System.out.println('Original (backed) Map: ' + int_map); //obtain synchronized map Map sync_map = Collections.synchronizedMap(int_map); //remove an element from the map int_map.remove(3, 30); //print the altered map System.out.println('
Synchronized map after remove(3, 30):' + sync_map); } }
Вихід:
Оригінальна (підтримана) карта: {1 = 10, 2 = 20, 3 = 30, 4 = 40, 5 = 50}
Синхронізована карта після видалення (3, 30): {1 = 10, 2 = 20, 4 = 40, 5 = 50}
Статична карта на Java
Статична карта в Java - це карта, яка оголошується статичною так само, як статична змінна. Оголошуючи карту статичною, вона стає доступною змінною класу без використання об'єкта.
Існує два підходи до створення та ініціалізації статичної карти в Java.
# 1) Використання статичної змінної
Тут ми створюємо статичну змінну мапи та створюємо її за допомогою екземпляра разом із оголошенням.
Цей підхід продемонстровано в наступній програмі Java.
import java.util.*; class Main { //declare a static map variable and initialize it with declaration private static final Map myMap = new HashMap(){ { put(1, 'India'); put(2, 'Portugal'); put(3, 'Germany'); } }; public static void main(String() args) { //print the map System.out.println('Static map using static map variable:'); System.out.println(myMap); } }
Вихід:
Статична карта з використанням статичної змінної карти:
{1 = Індія, 2 = Португалія, 3 = Німеччина}
# 2) Використання статичного блоку
У цьому ми створюємо статичну змінну карти. Потім ми створюємо статичний блок, і всередині цього статичного блоку ми ініціалізуємо змінну map.
Програма демонструє це.
import java.util.*; class Main { // Declare the static map private static Map map; // declare a static block and initialize static map static { map = new HashMap(); map.put(1, 'Red'); map.put(2, 'Green'); map.put(3, 'Blue'); } public static void main(String() args) { System.out.println('Static Map using static block:'); System.out.println(map); } }
Вихід:
Статична карта з використанням статичного блоку:
{1 = червоний, 2 = зелений, 3 = синій}
Перетворення списку на карту
У цьому розділі ми обговоримо методи перетворення списку на карту.
Два методи включають:
Традиційний метод
У традиційному методі кожен елемент списку копіюється на карту за допомогою циклу для кожного.
Ця реалізація показана нижче:
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a list List colorsList = new ArrayList(); colorsList.add('Red'); colorsList.add('Green'); colorsList.add('Blue'); colorsList.add('Brown'); colorsList.add('White'); System.out.println('The given list: ' + colorsList); //declare a map Map map = new HashMap(); //initial Id(key) int i=1; //assign each list element to the map for (String color : colorsList) { map.put(i, color); i++; } //print the map System.out.println('Map generated from List:' + map); } }
Вихід:
Наведений список: (Червоний, Зелений, Синій, Коричневий, Білий)
Карта, створена зі списку: {1 = червоний, 2 = зелений, 3 = синій, 4 = коричневий, 5 = білий}
Список для відображення на Java 8
Ми також можемо використовувати метод Java 8 Collectors.mapOf (), який перетворить даний список на карту.
Наведена нижче програма це демонструє.
import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; // class for list class Subject { //sub_id => map key private Integer sub_id; // sub_name => map value private String sub_name; // Subject constructor public Subject(Integer sub_id, String sub_name) { // initialize sub_id and sub_name this.sub_id = sub_id; this.sub_name = sub_name; } // return sub_id public Integer getSub_Id() { return sub_id; } // return sub_name public String getSub_Name() { return sub_name; } } public class Main { public static void main(String() args) { // create a list and add values to the list List sub_list = new ArrayList(); sub_list.add(new Subject(1, 'Abacus')); sub_list.add(new Subject(2, 'Maths')); sub_list.add(new Subject(3, 'Physics')); sub_list.add(new Subject(3, 'Chemistry')); //use Java 8 Collectors.toMap() method to create a map and assign list elements to it LinkedHashMap sub_map = sub_list.stream() .collect( Collectors.toMap(Subject::getSub_Id, Subject::getSub_Name,(x, y) -> x + ', ' + y, LinkedHashMap::new)); //print the map System.out.println('Map obtained from list : ' + sub_map); } }
Вихід:
Карта отримана зі списку: {1 = Абакус, 2 = Математика, 3 = Фізика, Хімія}
У цій програмі ми маємо клас Subject, який діє як клас списку. Клас Subject має два поля, тобто sub_id та sub_name. У нас є методи зчитування значень полів з класу. У головній функції ми створюємо об’єкти цього класу та будуємо список.
Потім цей список перетворюється на карту за допомогою методу Collectors.MapOf, який бере елементи по одному. Він також бере sub_Id як ключ до карти. Нарешті, генерується карта, яка має sub_Id як ключ і Sub_Name як значення.
Перетворити карту на рядок на Java
Колекцію карт можна перетворити на рядок, використовуючи два підходи:
Використання StringBuilder
Тут ми створюємо об’єкт StringBuilder, а потім копіюємо пари ключ-значення карти в об’єкт StringBuilder. Потім ми перетворюємо об’єкт StringBuilder у рядок.
У наведеній нижче програмі показано код Java для перетворення карти у рядок.
import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String() args) { //create and initialize a map Map numberNames = new HashMap(); numberNames.put(10, 'Ten'); numberNames.put(20, 'Twenty'); numberNames.put(30, 'Thirty'); numberNames.put(40, 'Forty'); //print the given map System.out.println('The given map: ' + numberNames); //create a StringBuilder object to store string StringBuilder map_String = new StringBuilder('{'); //append key-value pair of map to StringBuilder object for (Integer key : numberNames.keySet()) { map_String.append(key + '=' + numberNames.get(key) + ', '); } map_String.delete(map_String.length()-2, map_String.length()).append('}'); //print the string from StringBuilder System.out.println('
The string representation of map:'); System.out.println(map_String.toString()); } }
Вихід:
Дана карта: {20 = двадцять, 40 = сорок, 10 = десять, 30 = тридцять}
Рядкове представлення карти:
{20 = двадцять, 40 = сорок, 10 = десять, 30 = тридцять}
Використання Java 8 Streams
У цьому методі ми створюємо потік з ключів карти, а потім перетворюємо його у рядок.
У наведеній нижче програмі показано перетворення карти у рядок за допомогою потоків.
import java.util.*; import java.util.stream.Collectors; public class Main{ public static void main(String() args) { //create and initialize a map Map numberNames = new HashMap(); numberNames.put(10, 'Ten'); numberNames.put(20, 'Twenty'); numberNames.put(30, 'Thirty'); numberNames.put(40, 'Forty'); //print the given map System.out.println('The given map: ' + numberNames); String map_String = numberNames.keySet().stream() .map(key -> key + '=' + numberNames.get(key)) .collect(Collectors.joining(', ', '{', '}')); //print the string System.out.println('
The string representation of map:'); System.out.println(map_String); } }
Вихід:
Дана карта: {20 = двадцять, 40 = сорок, 10 = десять, 30 = тридцять}
Рядкове представлення карти:
{20 = двадцять, 40 = сорок, 10 = десять, 30 = тридцять}
Перетворити карту на список на Java
Карта складається з ключів і значень, тоді як список - це послідовність окремих елементів. При перетворенні карти в список ми зазвичай перетворюємо ключі в список ключів і значень у список значень.
Наступна програма Java показує це перетворення.
import java.util.*; public class Main { public static void main(String() args) { //declare a map and initialize it Map color_map = new HashMap(); color_map.put(10, 'red'); color_map.put(20, 'green'); color_map.put(30, 'blue'); color_map.put(40, 'cyan'); color_map.put(50, 'magenta'); //print the list of keys using map.keySet() method System.out.println('List of keys from the given map:'); List key_list = new ArrayList(color_map.keySet()); System.out.println(key_list); //print the list of values using map.values() method System.out.println('
List of values from the given map:'); List val_list = new ArrayList(color_map.values()); System.out.println(val_list); } }
Вихід:
Список ключів з даної карти:
(50, 20, 40, 10, 30)
Список значень з даної карти:
(пурпуровий, зелений, блакитний, червоний, синій)
Словник проти Карта на Java
Давайте обговоримо деякі основні відмінності між словником та картою на Java.
Словник | Карта |
---|---|
Словник - це абстрактний клас. | Карта - це інтерфейс. |
Класи та методи, використовувані словниковим класом, передують структурі колекцій. | Класи та методи, що використовуються класами карт, є частиною структури колекції. |
Якщо клас розширює словник, він не може розширити будь-який інший клас, оскільки Java підтримує лише одне успадкування | Карта є інтерфейсом, тому клас може успадковувати від карти та інших інтерфейсів |
Стара реалізація. Майже застаріле в нових версіях Java. | Інтерфейс карти замінив реалізацію словника. |
Часті запитання
Q # 1) Чому ми використовуємо інтерфейс карти в Java?
Відповідь: Карта - це інтерфейс у Java, який реалізований класами, що зберігають дані як пари ключ-значення. Інтерфейс карти забезпечує операції / методи, які можна виконувати над парами ключ-значення, такими як вставка, оновлення, видалення тощо.
Q # 2)Що означає MAP у Java?
Відповідь: Карта в Java представляє відображення ключа з певним значенням. Карта Java зберігає ці пари ключ-значення на карті. Ми можемо шукати і отримувати значення, пов’язане з ключем, просто використовуючи ключ на карті.
як зробити чергу в Java - -
Карта реалізована в Java за допомогою інтерфейсу, який не є частиною інтерфейсу колекції. Але карта - це колекція.
Q # 3)Що отримує MAP?
Відповідь: Get () - це метод, що надається інтерфейсом карти в Java, який використовується для отримання значення, пов'язаного з певним ключем, що надається як аргумент методу get (). Якщо значення відсутнє, повертається нуль.
Q # 4)Карта є колекцією?
Відповідь: Хоча карта загалом розглядається як колекція, вона не реалізує інтерфейс колекції. Деякі реалізації map, такі як treemap, не підтримують нульові значення або ключі.
Q # 5)У чому різниця між набором та картою?
Відповідь: Set - це набір лише ключів, тоді як карта - це набір пар ключ-значення. Хоча набір не допускає нульових значень, деякі реалізації карти дозволяють нульові значення.
Набір не дозволяє повторювані ключі. Карта може допускати повторювані значення, але ключі повинні бути унікальними. Набір зазвичай використовується, коли ми хочемо зберегти колекцію унікальних елементів. Карту можна використовувати, коли нам потрібно зберігати дані у формі пар ключ-значення.
Висновок
У цьому підручнику ми обговорили основи інтерфейсу карти. Ми також бачили різні методи та всі інші деталі, пов'язані з інтерфейсом карти в Java. Ми дізналися, що існують різні реалізації інтерфейсів карт, включаючи dreemap, hashmap тощо.
У наступних навчальних посібниках ми детальніше обговоримо реалізацію цієї карти.
=> Завітайте сюди, щоб вивчити Java з нуля.
Рекомендована література
- Що таке хеш-карта в Java?
- TreeMap в Java - Підручник з прикладами Java TreeMap
- LinkedHashMap в Java - Приклад і реалізація LinkedHashMap
- Встановити інтерфейс у Java: Підручник із набору Java з прикладами
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java
- Підручник зі стеку Java: Впровадження класу стеку на прикладах
- Підручник з роздумів про Java з прикладами
- Нерівний масив у Java - Підручник із прикладами