java map interface tutorial with implementation examples
Овај свеобухватни приручник за Јава мапе покрива како да креирате, покренете и обрадите мапе. Такође ћете научити о методама мапа и примерима примене:
Упознаћете основе интерфејса карте, методе подржане интерфејсом мапе и друге специфичне појмове повезане са интерфејсом мапе.
Збирка мапа у Јави је збирка која пресликава кључ вредности. То је колекција која се састоји од кључева и вредности. Сваки унос на мапи састоји се од кључа са одговарајућом вредношћу. Тастери су јединствени на мапама. Мапе се обично могу користити када треба да изменимо колекцију на основу кључне вредности.
=> Овде проверите СВЕ Јава туторијале.
Шта ћете научити:
- Мапе у Јави
- Методе мапирања
- Имплементација Јава мапе
- Закључак
Мапе у Јави
Мапа у Јави је део интерфејса јава.утил.мап. Интерфејс мапе није део интерфејса збирке и то је разлог због којег се мапе разликују од осталих колекција.
Општа хијерархија интерфејса мапе је приказана у наставку.
Као што је горе приказано, постоје два интерфејса за примену мапе, односно интерфејс мапе и сортедМап интерфејс. Постоје три класе, односно ХасхМап, ТрееМап и ЛинкедХасхМап.
Ови типови мапа су описани у наставку:
Класа | Опис | |
---|---|---|
уклонити | В уклони (тастер објекта) | Избришите унос на мапи за дати кључ |
ЛинкедХасхМап | Проширује се из класе ХасхМап. Ова мапа одржава редослед уметања | |
ХасхМап | Имплементирајте интерфејс мапе. ХасхМап не одржава редослед. | |
ТрееМап | Примењује интерфејс мап и сортедМап. ТрееМап одржава растући поредак. |
Тачке које треба запамтити о мапама.
- На мапама се сваки кључ може пресликати на највише једну вредност. Такође, на мапама не могу бити дупликати кључева.
- Имплементације мапа попут ХасхМап и ЛинкедХасхМап омогућавају нулл и нулл вредности. Међутим, ТрееМап то не дозвољава.
- Мапа се не може прећи онаква каква јесте. Због тога за кретање треба да се конвертује у сет помоћу методе скупа тастера () или ентриСет ().
Направите мапу на Јави
Да бисмо креирали мапу у Јави, прво морамо да укључимо интерфејс у наш програм. Можемо користити једну од следећих изјава у програму за увоз функционалности мапе.
import java.util.*; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.TreeMap;
Морамо да направимо конкретну имплементацију мапе јер је она интерфејс.
Следеће изјаве креирају мапу у Јави.
Map hash_map = new HashMap(); Map tree_map = new TreeMap();
Горње изјаве ће створити мапе са заданим спецификацијама.
Такође можемо створити генеричке мапе специфицирајући типове и за кључ и за вредност.
Map myMap = new HashMap();
Горња дефиниција имаће као вредности кључеве типа стринг и објекте.
Иницијализујте мапу у Јави
Може се иницијализовати помоћу следећих метода:
# 1) Коришћење колекција
Класа Јава Цоллецтионс има фабричке методе које се могу користити за иницијализацију колекција, укључујући мапе.
Неке методе које се користе за иницијализацију мапе су следеће:
(1) Цоллецтионс.ЕмптиМап ()
Цоллецтионс.ЕмптиМап () враћа серијску и непроменљиву мапу која је празна. На пример, следећи ред кода,
Map myMap = Collections.EMPTY_MAP;
Ово ће створити празну мапу. Горња метода може да баци „упозорење о непровереном додељивању“, па стога такође можемо користити образац за безбедност типа, како следи.
Map myMap = Collections.emptyMap ();
(2) Цоллецтионс.унМодифиаблеМап ()
Метода унМодифиаблеМап () узима другу мапу као аргумент и креира непроменљиви приказ оригиналне мапе.
Map myMap = Collections.EMPTY_MAP; Map map_unmodifiable = Collections.unmodifiableMap (myMap);
(3) Цоллецтионс.синглетонМап ()
Класа колекција такође пружа фабричку методу ‘синглетонМап ()’ која креира непроменљиву синглетон мапу која има само један унос.
Map singleton_map = Collections.singletonMap('CHN', 'Beijing');
# 2) Коришћење Јава 8
Можемо добити ток података из Јава 8 метода АПИ протока и конструисати мапе помоћу колектора.
Неке од метода за изградњу мапа су:
(1) Цоллецторс.тоМап ()
Прикупљамо ток, а затим користимо методу Цоллецторс.тоМап () за изградњу мапе.
Map map = Stream.of(new String()(){{'USA', 'Washington'}, {'United Kingdom', 'London'} }).collect(Collectors.toMap(p -> p(0), p -> p(1)));
Горња изјава креира мапу из Јава 8 тока.
(2) Цоллецторс.цоллецтингАндТхен ()
У овоме прилагођавамо методу тоМап () која омогућава сакупљачу да израђује непроменљиву мапу методом цоллецтионАндТхен ().
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) Коришћењем пут методе Мап Интерфаце
Метода пут () интерфејса мапе може се користити за додељивање почетних вредности мапама.
# 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); } }
Излаз:
унмодифиаблеМап вредности мапе: {}
Вредности мапе синглетон_мап: {10 = ТЕН}
вредности мап_цитиес: {ЦХ = Цхеннаи, ДЛ = Нев Делхи, МХ = Мумбаи}
цапиталс_Мап вредности: {МАХ = Мумбаи, ГОА = Панаји, КАР = Бангалуру}
Вредности карте: {САД = Вашингтон, ГЕР = Берлин, УК = Лондон, ИНД = Делхи}
Понављајте мапу на Јави и одштампајте мапу
Мапу можемо прећи на исти начин као и остале колекције. Поред преласка уноса на мапи, такође можемо прелазити само кључеве или само вредности на мапи. Имајте на уму да је за прелазак мапе потребно прво претворити да би се поставила.
За прелазак преко уноса на мапи користе се следеће методе.
Коришћење Ентре Итератора
Овим методом добијамо итератор уноса из скупа уноса. Затим помоћу метода гетКеи и гетВалуе дохваћамо пар кључ / вредност за сваки унос мапе.
Следећи програм приказује употребу итератора уноса.
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()); } } }
Излаз:
Уноси на мапи су:
КЉУЧНА ВРЕДНОСТ
ЦХ Цхеннаи
ДЛ Нев Делхи
МХ Мумбаи
У горе наведеном програму добијамо итератор уноса са мапе методом ентриСет. Затим прелазимо преко мапе методом хасНект () за унос итератора и исписујемо пар кључ / вредност.
Коришћење уноса за сваку петљу
Овде прелазимо ентриСет користећи фор-свака петља и примена је приказана испод.
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()); } } }
Излаз:
Уноси на мапи су:
КЉУЧНА ВРЕДНОСТ
ЦХ Цхеннаи
ДЛ Нев Делхи
МХ Мумбаи
Методе мапирања
Мап интерфејс у Јави подржава разне операције сличне онима које подржавају друге колекције. У овом одељку ћемо размотрити различите методе које пружа Мап АПИ у Јави. Како је опсег овог водича ограничен на увођење интерфејса мапа уопште, нећемо описивати ове методе.
О овим методама ћемо детаљно разговарати док разговарамо о класама интерфејса мапе.
Следећа табела наводи све методе које пружа АПИ мапе.
Назив методе | Прототип методе | Опис |
---|---|---|
добити | В гет (Објецт кеи) | Враћа објекат или вредност за дати кључ |
ставити | В пут (кључ објекта, вредност објекта) | На мапу унесите унос кључ / вредност |
Стави све | воид путАлл (мапа мапе) | Уметните дате уносе на мапи. Другим речима, копира или клонира мапу. |
кеиСет | Постави кеиСет () | Приказује постављени приказ мапе. |
ентриСет | Комплет | Повратак поставља приказ за дату мапу |
вредности | Вредности колекције () | Враћа приказ збирке вредности на мапи. |
величина | инт величина () | Враћа број уноса на мапи |
јасно | воид цлеар () | Обрише мапу |
Празно | боолеан исЕмпти () | Проверава да ли је карта празна и ако је да, враћа тачно. |
цонтаинсВалуе | боолеан цонтаинсВалуе (вредност објекта) | Враћа тачно ако мапа садржи вредност једнаку датој вредности |
цонтаинсКеи | боолеан цонтаинсКеи (Објецт кеи) | Враћа тачно ако дати кључ постоји на мапи |
једнако | боолеан једнако (Објект о) | Упоређује наведени објекат о са мапом |
хасхЦоде | инт хасхЦоде () | враћа хеш код за Мапу |
за сваки | воид форЕацх (акција БиЦонсумер) | Изводи задату радњу за сваки унос на мапи |
гетОрДефаулт | В гетОрДефаулт (Објецт кеи, В дефаултВалуе) | Враћа наведену вредност за дати кључ или његову подразумевану вредност ако кључ није присутан |
уклонити | логичко уклањање (кључ објекта, вредност објекта) | Уклања одређене кључеве и вредности |
заменити | В замена (тастер К, вредност В) | Замењује дати кључ наведеном вредношћу |
заменити | логичка замена (тастер К, В олдВалуе, В невВалуе) | Замењује стару вредност новом вредношћу за дати кључ |
замените | воид реплацеАлл (функција БиФунцтион) | Призива задату функцију да замени све уносе на мапи |
путИфАбсент | В путИфАбсент (К кључ, В вредност) | Убацује дати кључ, вредност само ако већ није присутан |
рачунати | В прорачун (К тастер, БиФунцтион ремаппингФунцтион) | Израчунава мапирање за наведени кључ и вредност с обзиром на функцију мапирања. |
цомпутеИфАбсент | В цомпутеИфАбсент (тастер К, пресликавање функција Функција) | Израчунајте вредност за дати кључ помоћу функције мапирања ако већ није присутна. |
цомпутеИфПресент | В цомпутеИфПресент (тастер К, БиФунцтион ремаппингФунцтион) | Израчунава ново мапирање за дати кључ са датом функцијом поновног мапирања ако је вредност кључа већ присутна |
иди | Спајање В (кључ К, В вредност, БиФунцтион ремаппингФунцтион) | Повезује дати кључ са вредношћу ако већ није повезан или је повезан са нултом вредношћу. |
Све горе наведене методе подржавају интерфејс мапе. Имајте на уму да су методе које изгледају осенчено нове нове методе које су укључене у Јава 8.
Имплементација Јава мапе
Следећи програм примењује пример мапе на Јави. Овде користимо већину горе наведених метода.
Пример показује разне операције добијања, стављања и постављања операција.
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()); } }
Излаз:
Кључ = ЦХН, вредност: Кина
Кључ = КСКС, вредност: нулл
нулл кеиЕкистс: труе, нулл валуеЕкистс = труе
унос постављен за земљу_мапа: (нулл = З, КСКС = нулл, ЦХН = Кина, СЛ = Сриланка, ИНД = Индија, КОР = Кореја)
Величина земље_земље: 6
мапа података мапирана у мапу земље: {нулл = З, КСКС = нулл, ЦХН = Кина, СЛ = Сриланка, ИНД = Индија, КОР = Коре
до}
нулта вредност кључа за дата_мап: З
дата_мап након уклањања нулл кључа = {КСКС = нулл, ЦХН = Кина, СЛ = Сриланка, ИНД = Индија, КОР = Кореја}
кључеви мапе података: (нулл, КСКС, ЦХН, СЛ, ИНД, КОР)
вредности мапе података: (З, нулл, Кина, Сриланка, Индија, Кореја)
мапа података након јасног рада је празна: труе
Сортирање мапе у Јави
Како се карта састоји од парова кључ / вредност, карту можемо сортирати по кључевима или вредностима.
У овом одељку ћемо сортирати мапу и на кључевима и на вредностима.
Поредај по кључу
Да бисмо сортирали мапу по тастерима, можемо користити мапу дрвета. Мапа дрвета аутоматски сортира тастере. Доле наведени програм Јава претвара мапу у стабло и приказује сортиране кључеве.
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()); } } }
Излаз:
Оригинална несортирана мапа:
Америка
Ц Кина
Д Данска
Кс Хонгконг
Ја Индија
Мапа сортирана по кључу:
Америка
Ц Кина
Д Данска
Ја Индија
Кс Хонгконг
Горњи програм креира мапу која се састоји од једне абецедне шифре као кључева и имена држава као вредности. Прво приказујемо оригиналну мапу која није сортирана. Затим мапу претварамо у мапу дрвета која аутоматски сортира кључеве. На крају, на тастерима приказујемо сортирану карту дрвета.
Поредај по вредности
Да бисмо сортирали мапу на основу вредности, прво је претварамо у листу. Затим ову листу сортирамо методом Цоллецтионс.сорт () која користи упоређивач за упоређивање вредности и њихово распоређивање у одређеном редоследу.
Једном када је листа сортирана, повезани уноси на листи се поново копирају на мапу која нам даје сортирану мапу.
Следећи Јава програм приказује сортирање мапе на основу вредности. Програм користи ЛинкедХасхМап који се преноси на функцију сортирања. У функцији сортирања претвара се у повезану листу и сортира. Након сортирања се конвертује назад у ЛинкедХасхМап.
најбољи програм за чишћење за Виндовс 10
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; } }
Излаз:
Оригинална несортирана мапа:
{НЕП = Катхманду, ИНД = Нев Делхи, САД = Васхингтон, УК = Лондон, АУС = Цанберра
Мапа сортирана по вредности:
Кључна вредност
ИЗ Канбере
НЕП Катхманду
УК Лондон
ИНД Њу Делхи
САД Вашингтон
Истовремена карта у Јави
ЦонцуррентМап је интерфејс који наслеђује од интерфејса јава.утил.мап. Интерфејс цонцуррентМап је први пут представљен у ЈДК 1.5 и пружа мапу која управља истовременим приступом.
Интерфејс цонцуррентМап је део пакета јава.утил.цонцуррент.
Следећи Јава програм приказује истовремену карту на Јави.
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 = љубичаста}
Синхронизована мапа у Јави
Синхронизована мапа је мапа која је заштићена од нити и иза које стоји дата мапа. У Јави се синхронизована мапа добија употребом методе синцхронизедМап () класе јава.утил.Цоллецтионс. Ова метода враћа синхронизовану мапу за дату мапу.
Ова враћена синхронизована мапа користи се за приступ пратећој мапи ради постизања серијског приступа.
Општа декларација методе синцхронизедМап () је:
public static Map synchronizedMap(Map m)
где је м => подржана мапа.
Као што је већ поменуто, овај метод враћа синхронизовани приказ мапе м.
Доле наведени Јава програм је пример синхронизоване мапе.
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}
Статичка мапа у Јави
Статичка мапа у Јави је мапа која се проглашава статичном баш као статичка променљива. Декларацијом мапе статичном, она постаје приступачна променљива класе без коришћења објекта.
Постоје два приступа стварању и иницијализацији статичке мапе у Јави.
# 1) Коришћење статичке променљиве
Овде креирамо статичку променљиву мапе и правимо инстанцу заједно са декларацијом.
Овај приступ је демонстриран у следећем Јава програму.
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) Коришћење статичког блока
У овом случају креирамо променљиву статичке мапе. Затим креирамо статички блок и унутар овог статичког блока иницијализујемо променљиву мапе.
Програм у наставку то показује.
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 = бела}
Листа за мапирање у Јави 8
Такође можемо користити Јава 8 методу Цоллецторс.мапОф () која ће претворити дату листу у мапу.
Програм у наставку то показује.
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 = Физика, Хемија}
У овом програму имамо предмет Предмет који делује као класа са листе. Предмет класе има два поља, односно суб_ид и суб_наме. Имамо методе за очитавање вредности поља из класе. У главној функцији креирамо објекте ове класе и конструишемо листу.
Затим се ова листа претвара у мапу помоћу методе Цоллецторс.МапОф која узима елементе један по један. Такође узима суб_Ид као кључ мапе. Коначно, генерише се мапа која има суб_Ид као кључ и Суб_Наме као вредност.
Претвори мапу у низ у Јави
Збирка мапа може се претворити у низ помоћу два приступа:
Коришћење СтрингБуилдер-а
Овде креирамо СтрингБуилдер објекат, а затим копирамо парове кључ / вредност мапе у СтрингБуилдер објекат. Затим претварамо објект СтрингБуилдер у низ.
Програм у наставку приказује Јава код за претварање мапе у низ.
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 = Тридесет}
Коришћење Јава 8 Стреамова
Овом методом креирамо ток из кључева мапе, а затим је претварамо у низ.
Програм дат у наставку приказује претварање мапе у низ помоћу токова.
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 = Тридесет}
Претвори мапу у листу на Јави
Мапа се састоји од кључева и вредности, док је листа низ појединачних елемената. Приликом претварања мапе у листу, кључеве обично претварамо у листу кључева и вредности у листу вредности.
Следећи Јава програм приказује ову конверзију.
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)
Списак вредности са дате мапе:
(магента, зелена, цијан, црвена, плава)
Дицтионари Вс. Мапа у Јави
Размотримо неке од главних разлика између речника и мапе у Јави.
Речник | Мапа |
---|---|
Речник је апстрактна класа. | Мапа је интерфејс. |
Класе и методе које користи класа речника претходе оквиру збирки. | Класе и методе које користе класе мапа део су оквира за прикупљање. |
Ако класа проширује речник, не може проширити ниједну другу класу јер Јава подржава само једно наслеђивање | Мапа је интерфејс, тако да класа може да наследи мапу и друге интерфејсе |
Стара примена. Готово застарело у новијим верзијама Јаве. | Интерфејс мапе заменио је имплементацију речника. |
Често постављана питања
П # 1) Зашто користимо интерфејс мапе у Јави?
Одговор: Мапа је интерфејс у Јави који се имплементира тако што класе чувају податке као парове кључ / вредност. Интерфејс мапе пружа операције / методе које се могу изводити на паровима кључ / вредност, попут уметања, ажурирања, брисања итд.
К # 2)Шта МАП значи на Јави?
Одговор: Мапа у Јави представља мапирање кључа са одређеном вредношћу. Јава карта чува ове парове кључ / вредност на мапи. Можемо потражити и вратити вредност повезану са кључем само помоћу кључа на мапи.
Мапа је имплементирана у Јави помоћу интерфејса који није део интерфејса Цоллецтион. Али карта је колекција.
К # 3)Шта добија МАП?
Одговор: Гет () је метода коју пружа интерфејс мапе у Јави која се користи за преузимање вредности повезане са одређеним кључем наведеним као аргумент за методу гет (). Ако вредност није присутна, враћа се нула.
К # 4)Да ли је мапа колекција?
Одговор: Иако се мапа генерално посматра као колекција, она не примењује интерфејс колекције. Неке од имплементација мапе, попут мапе дрвета, не подржавају нулл вредности или кључеве.
како додати елементе у низ
К # 5)Која је разлика између скупа и мапе?
Одговор: Сет је колекција само кључева, док је мапа колекција парова кључ / вредност. Иако скуп не дозвољава нулл вредности, неке од имплементација мапе дозвољавају нулл вредности.
Сет не дозвољава дуплиране кључеве. Мапа може да дозволи дуплиране вредности, али кључеви морају бити јединствени. Сет се обично користи када желимо да сачувамо колекцију јединствених елемената. Мапа се може користити када треба да сачувамо податке у облику парова кључ / вредност.
Закључак
У овом упутству смо разговарали о основама интерфејса мапе. Такође смо видели разне методе и све остале детаље повезане са интерфејсом мапе у Јави. Открили смо да постоје разне имплементације интерфејса мапа, укључујући мапу дрвета, хасхмапу итд.
У нашим предстојећим водичима детаљније ћемо размотрити ову примену мапе.
=> Посетите овде да бисте научили Јаву из нуле.
Препоручено читање
- Шта је ХасхМап у Јави?
- ТрееМап у Јави - Водич за примере Јава ТрееМап
- ЛинкедХасхМап у Јави - пример и примена ЛинкедХасхМап
- Постављање интерфејса у Јави: Водич за постављање Јава-а са примерима
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- Водич за Јава стацк: Примена класе стека са примерима
- Водич за Јава рефлексију са примерима
- Назубљени низ у Јави - Водич са примерима