what is hashmap java
Овај водич за ХасхМап за Јава објашњава шта је ХасхМап у Јави и како се користи. Садржи како пријавити, покренути, поновити, применити и одштампати ХасхМап:
ХасхМап у Јави је колекција заснована на мапи и састоји се од парова кључ / вредност. ХасхМап се означава са или. Елементу ХасхМап може се приступити помоћу кључа, тј. Морамо знати кључ за приступ елементу ХасхМап.
ХасхМап користи технику која се назива „Хасхинг“. У хеширању се дужи низ претвара у краћи низ применом неког алгоритма или „хеш функције“. Низ се претвара у краћи низ јер помаже бржем претраживању. Такође се користи за ефикасно индексирање.
=> Посетите овде за ексклузивну серију лекција за Јава тренинг.
Шта ћете научити:
- ХасхМап у Јави
- Јава мапа вс ХасхМап
- Закључак
ХасхМап у Јави
ХасхМап је сличан ХасхТабле-у, с том разликом што ХасхМап није синхронизован и омогућава нулл вредности за кључ и вредност.
Неке важне карактеристике ХасхМап-а су дате у наставку:
- ХасхМап је имплементиран на Јави у класи „Хасхмап“ која је део пакета јава.утил.
- Класа ХасхМап наслеђује од класе „АбстрацтМап“ која делимично имплементира интерфејс Мап.
- ХасхМап такође примењује интерфејсе који се могу „клонирати“ и „сериализовати“.
- ХасхМап дозвољава двоструке вредности, али не дозвољава двоструке кључеве. ХасхМап такође омогућава више нулл вредности, али нулл кључ може бити само један.
- ХасхМап није синхронизован и такође не гарантује редослед елемената.
- Класа Јава ХасхМап има почетни капацитет 16, а задати (почетни) фактор учитавања је 0,75.
Како објавити хасх-карту на Јави?
ХасхМап у Јави део је пакета јава.утил. Стога, ако у нашем коду треба да користимо ХасхМап, прво морамо да увеземо класу имплементације користећи једну од следећих изјава:
import java.util.*;
ИЛИ
import java.util.HashMap;
Општа декларација класе ХасхМап је:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Овде је К => тип кључева присутних на мапи
В => врста вредности пресликаних на кључеве на мапи
Направите ХасхМап
ХасхМап у Јави може се креирати на следећи начин:
import java.util.HashMap; HashMap cities_map = new HashMap ();
Горња изјава прво укључује класу ХасхМап у Јави. Затим у следећој изјави креирамо ХасхМап под називом ‘цитиес_мап’ са типом кључа као Интегер и Валуес као Стринг.
Једном када се креира ХасхМап, морамо је иницијализовати вредностима.
Како иницијализовати хасх карту?
ХасхМап можемо иницијализовати методом пут стављањем неких вредности на мапу.
Програм у наставку приказује иницијализацију ХасхМап-а у Јави.
import java.util.*; class Main{ public static void main(String args()){ //create a HashMap and print HashMap colorsMap=new HashMap(); System.out.println('Initial Map: '+colorsMap); //put some initial values into it using put method colorsMap.put(100,'Red'); colorsMap.put(101,'Green'); colorsMap.put(102,'Blue'); //print the HashMap System.out.println('After adding elements:'); for(Map.Entry m:colorsMap.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } } }
Излаз:
Почетна карта: {}
Након додавања елемената:
100 Мрежа
101 Зелена
102 Плава
Како ХасхМап ради интерно?
Знамо да је ХасхМап колекција парова кључ / вредност и користи технику која се назива „Хасхинг“. Интерно, ХасхМап је низ чворова. ХасхМап користи низ и ЛинкедЛист за чување парова кључ / вредност.
Доље је дата структура чвора ХасхМап-а која је програмски представљена као класа.
Као што се види из горње представе чвора, чвор има структуру сличну чвору повезане листе. Низ ових чворова назива се Буцкет. Свака група може имати исти капацитет, а може имати и више чворова.
На перформансе ХасхМап-а утичу два параметра:
(и) Почетни капацитет: Капацитет је дефинисан као број сегмената у ХасхМап-у. Почетни капацитет се дефинише као капацитет објекта ХасхМап када се креира. Капацитет ХасхМап-а се увек помножи са 2.
(ии) ЛоадФацтор: ЛоадФацтор је параметар који мери приликом поновног уклапања - повећава се капацитет.
Имајте на уму да ће, ако је капацитет велик, фактор оптерећења бити мали, јер неће бити потребно поновљено увијање. Слично томе, када је капацитет низак, фактор оптерећења биће висок јер ћемо морати често да преиспитујемо. Стога бисмо требали пазити да пажљиво одаберемо ова два фактора како бисмо дизајнирали ефикасну хасхМап.
Како обрадити ХасхМап?
Потребно је прећи ХасхМап за манипулацију или испис парова кључ / вредност.
Постоје два начина на која можемо прећи или поновити ХасхМап.
- Коришћење фор петље
- Коришћење вхиле петље и итератора.
Јава програм у наставку приказује примену обе ове методе.
Прво дохваћамо скуп уноса из ХасхМап-а помоћу методе ентриСет, а затим прелазимо преко скупа помоћу петље фор. Затим исписујемо парове кључ / вредност помоћу метода гетКеи () и гетВалуе ().
Да бисмо прешли ХасхМап помоћу лооп-а вхиле, прво поставимо итератор за ХасхМап, а затим приступимо паровима кључ / вредност помоћу итератора.
import java.util.*; public class Main{ public static void main(String () args) { //create a HashMap and initialize it HashMap cities_map = new HashMap(); cities_map.put(10, 'MUM'); cities_map.put(1, 'DL'); cities_map.put(20, 'PUN'); cities_map.put(7, 'GOA'); cities_map.put(3, 'HYD'); //print using for loop System.out.println('HashMap using for Loop:'); System.out.println(' KEY VALUE'); for (Map.Entry mapSet : cities_map.entrySet()) { System.out.println(' '+mapSet.getKey() + ' ' + mapSet.getValue()); } //print using while loop with iterator System.out.println('HashMap using while Loop:'); System.out.println(' KEY VALUE'); Iterator iterator = cities_map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry mapSet2 = (Map.Entry) iterator.next(); System.out.println(' '+mapSet2.getKey() + ' ' + mapSet2.getValue()); } } }
Излаз:
ХасхМап користи за Лооп:
КЉУЧНА ВРЕДНОСТ
1 ДЛ
3 ЛОНГ
20 ПУН
7 ГОА
10 МАМА
ХасхМап користећи вхиле Лооп:
КЉУЧНА ВРЕДНОСТ
1 ДЛ
3 ЛОНГ
20 ПУН
7 ГОА
10 МАМА
Одштампајте Хасх мапу
Погледајмо још један пример штампања хасхМап-а помоћу фореацх петље приказане у доњем програму.
import java.util.HashMap; public class Main { public static void main(String() args) { // create a HashMap and initialize HashMap colors = new HashMap(); colors.put('Red', 1); colors.put('Orange', 5); colors.put('Magenta', 8); //print the HashMap System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); for (String i : colors.keySet()) { System.out.println(' ' + i + ' ' + colors.get(i)); } } }
Излаз:
Садржај ХасхМап-а:
КЉУЧНА ВРЕДНОСТ
Мрежа 1
Магента 8
Наранџаста 5
Конструктор / методе ХасхМап-а у Јави
Табеле у наставку приказују конструкторе и методе које пружа класа ХасхМап у Јави.
Конструктори
Прототип конструктора | Опис | |
---|---|---|
Стави све | воид путАлл (мапа мапе) | Убацује наведене елементе „мапе“ у ХасхМап. |
ХасхМап () | Подразумевани конструктор. | |
ХасхМап (мапа м) | Ствара нову ХасхМап од датог објекта мапе м. | |
ХасхМап (инт капацитет) | Ствара нову ХасхМап са почетним капацитетом датим аргументом „капацитет“. | |
ХасхМап (инт капацитет, флоат лоадФацтор) | Ствара нову ХасхМап користећи вредности капацитета и лоадФацтор које пружа конструктор. |
Методе
Метод | Прототип методе | Опис |
---|---|---|
јасно | воид цлеар () | Брише сва мапирања у ХасхМап-у |
Празно | боолеан исЕмпти () | Проверава да ли је ХасхМап празан. Враћа тачно ако је одговор да. |
клон | Клон објекта () | Враћа плитку копију без клонирања пресликавања кључева и вредности у ХасхМап-у. |
ентриСет | Постави ентриСет () | Враћа мапирања у ХасхМап-у као колекцију |
сет тастера | Постави кеиСет () | Приказује скуп кључева у ХасхМап-у. |
ставити | В пут (кључ објекта, вредност објекта) | Убацује унос кључ / вредност у ХасхМап. |
путИфАбсент | В путИфАбсент (К кључ, В вредност) | Убацује дати пар кључ / вредност у ХасхМап ако већ није присутан. |
уклонити | В уклони (тастер објекта) | Избришите унос са ХасхМап-а за дати кључ. |
уклонити | логичко уклањање (кључ објекта, вредност објекта) | Брише дати пар кључ / вредност са ХасхМап-а. |
рачунати | В израчунавање (К тастер, БиФунцтион ремаппингФунцтион) | Израчунава мапирање помоћу „функције пресликавања“ за дати кључ и његову тренутну вредност или нулу. |
Метод | Прототип методе | Опис |
цомпутеИфАбсент | В цомпутеИфАбсент (тастер К, пресликавање функција Функција) | Израчунава мапирање помоћу функције ‘маппингФунцтион’ и убацује парове кључ / вредност ако већ није присутан или је нулл. |
цомпутеИфПресент | В цомпутеИфПресент (тастер К, БиФунцтион ремаппингФунцтион) | Израчунава ново мапирање помоћу функције 'ремаппингФунцтион' која има кључ ако је кључ већ присутан и није нулл. |
цонтаинсВалуе | боолеан цонтаинсВалуе (вредност објекта) | Проверава да ли дата вредност постоји у ХасхМап-у и враћа труе ако да. |
цонтаинсКеи | боолеан цонтаинсКеи (Објецт кеи) | Проверава да ли је дати кључ присутан у ХасхМап-у и враћа труе ако да. |
једнако | боолеан једнако (Објект о) | Поређује дати објекат са ХасхМап-ом. |
за сваки | воид форЕацх (акција БиЦонсумер) | Извршава задату „акцију“ за сваки од уноса у ХасхМап-у. |
добити | В гет (Објецт кеи) | Враћа објекат који садржи дати кључ са придруженом вредношћу. |
гетОрДефаулт | В гетОрДефаулт (Објецт кеи, В дефаултВалуе) | Враћа вредност на коју се пресликава дати кључ. Ако није мапиран, враћа подразумевану вредност. |
Празно | боолеан исЕмпти () | Проверава да ли је ХасхМап празан. |
иди | Спајање В (кључ К, В вредност, БиФунцтион ремаппингФунцтион) | Проверава да ли је дати кључ нулл или није повезан са вредношћу, а затим га придружује не-нулл вредности помоћу ремаппингФунцтион. |
заменити | В замена (тастер К, вредност В) | Замењује дату вредност за наведени кључ. |
заменити | логичка замена (тастер К, В олдВалуе, В невВалуе) | Замењује стару вредност датог кључа новом |
замените | воид реплацеАлл (функција БиФунцтион) | Извршава задату функцију и замењује све вредности у ХасхМап-у резултатом функције. |
вредности | Вредности колекције () | Враћа колекцију вредности присутних у ХасхМап-у. |
величина | инт величина () | Приказује величину броја уноса у ХасхМап-у. |
Имплементација Хасхмап-а
Затим ћемо имплементирати већину ових функција у Јава програм да бисмо боље разумели њихов рад.
Следећи Јава програм приказује имплементацију ХасхМап-а у Јави. Имајте на уму да смо користили већину метода о којима смо горе говорили.
import java.util.*; public class Main { public static void main(String args()) { HashMap hash_map = new HashMap(); hash_map.put(12, 'Leo'); hash_map.put(2, 'Seville'); hash_map.put(7, 'Lacy'); hash_map.put(49, 'Lily'); hash_map.put(3, 'Dillon'); System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); //display HashMap contents Set setIter = hash_map.entrySet(); Iterator map_iterator = setIter.iterator(); while(map_iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)map_iterator.next(); System.out.println(' '+ map_entry.getKey() + ' ' + map_entry.getValue()); } //get value for the given key String var= hash_map.get(2); System.out.println('Value at index 2 is: '+var); //delete value given the key hash_map.remove(3); System.out.println('Hashmap after removal:'); System.out.println(' KEY VALUE'); Set iter_set = hash_map.entrySet(); Iterator iterator = iter_set.iterator(); while(iterator.hasNext()) { Map.Entry mentry = (Map.Entry)iterator.next(); System.out.println(' '+mentry.getKey() + ' ' + mentry.getValue() ); } } }
Излаз:
Садржај ХасхМап-а:
КЉУЧНА ВРЕДНОСТ
49 Лили
2 Севиља
3 Диллон
7 Лаци
12 Лав
Вредност у индексу 2 је: Севиља
Хасхмап након уклањања:
КЉУЧНА ВРЕДНОСТ
49 Лили
2 Севиља
7 Лаци
12 Лав
Сортирај ХасхМап у Јави
У Јави, ХасхМап не чува редослед. Стога морамо да сортирамо елементе у ХасхМап-у. Елементе у ХасхМап-у можемо сортирати на основу кључева или вредности. У овом одељку ћемо размотрити оба приступа сортирања.
Поредај хеш-мапу по тастерима
import java.util.*; public class Main { public static void main(String() args) { //create and initialize a HashMap HashMap colors_map = new HashMap(); colors_map.put(9, 'Magenta'); colors_map.put(11, 'Yellow'); colors_map.put(7, 'Cyan'); colors_map.put(23, 'Brown'); colors_map.put(5, 'Blue'); colors_map.put(3, 'Green'); colors_map.put(1, 'Red'); //print the unsorted HashMap by getting a set and using iterator System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry me = (Map.Entry)iterator.next(); System.out.print(me.getKey() + ': '); System.out.println(me.getValue()); } //create a treemap from given HashMap so that the keys are sorted Map map = new TreeMap(colors_map); System.out.println('HashMap Sorted on keys:'); //print the sorted HashMap Set set2 = map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry me2 = (Map.Entry)iterator2.next(); System.out.print(me2.getKey() + ': '); System.out.println(me2.getValue()); } } }
Излаз:
Неразврстана ХасхМап:
1: Мрежа
3: Зелена
5: плава
7: Цијан
23: Браон
9: Магента
11: Жута
ХасхМап сортирано по кључевима:
1: Мрежа
3: Зелена
5: плава
7: Цијан
9: Магента
11: Жута
23: Браон
иоутубе то мп4 претварач за андроид
У горе наведеном програму видимо да када се хешмапа дефинише и попуни вредностима, од ње креирамо мапу стабла. Како се хешмапа претвара у мапу стабла, њени кључеви се аутоматски сортирају. Дакле, када прикажемо ову карту дрвета, на кључевима ћемо добити сортирану мапу.
Поредај хеш-мапу према вредностима
За сортирање ХасхМап-а према вредностима, прво претварамо хасхмапу у ЛинкедЛист. Затим за сортирање листе користимо методу Цоллецтионс.сорт заједно са упоређивачем. Затим се ова листа претвара назад у ХасхМап. Затим се одштампа сортирана ХасхМап.
import java.util.*; public class Main { public static void main(String() args) { //Create and initialize the HashMap HashMap colors_map = new HashMap(); colors_map.put(5, 'B'); colors_map.put(11, 'O'); colors_map.put(3, 'I'); colors_map.put(13, 'R'); colors_map.put(7, 'G'); colors_map.put(1, 'V'); colors_map.put(9, 'Y'); //print the HashMap using iterator after converting to set System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)iterator.next(); System.out.print(map_entry.getKey() + ': '); System.out.println(map_entry.getValue()); } //call sortByValues method that returns a sorted Map. Map c_map = sortByValues(colors_map); System.out.println('HashMap sorted on values:'); //print the sorted HashMap Set set2 = c_map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry map_entry2 = (Map.Entry)iterator2.next(); System.out.print(map_entry2.getKey() + ': '); System.out.println(map_entry2.getValue()); } } private static HashMap sortByValues(HashMap hash_map) { //create a LinkedList from HashMap List list = new LinkedList(hash_map.entrySet()); // use Collections.sort method with Comparator to sort the list Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()) .compareTo(((Map.Entry) (o2)).getValue()); } }); //create a HashMap from linkedlist which preserves the order HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } return sortedHashMap; } }
Излаз:
Неразврстана ХасхМап:
1: В.
3: И
5: Б.
7: Г.
9: и
11: О.
13: Р.
ХасхМап сортиран по вредностима:
5: Б.
7: Г.
3: И
11: О.
13: Р.
1: В.
9: и
Истовремена ХасхМап у Јави
У нормалном ХасхМап-у нећемо моћи да модификујемо елементе током извођења или док се врши итерација.
Примена истовремене мапе приказана је у наставку:
import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class Main { public static void main(String() args) { //declare and initialize ConcurrentHashMap Map cCMap = new ConcurrentHashMap(); cCMap.put('1', '10'); cCMap.put('2', '10'); cCMap.put('3', '10'); cCMap.put('4', '10'); cCMap.put('5', '10'); cCMap.put('6', '10'); //print the initial ConcurrentHashMap System.out.println('Initial ConcurrentHashMap: '+cCMap); //define the iterator over the keys of ConcurrentHashMap Iterator it = cCMap.keySet().iterator(); //change one of the keys using iterator while(it.hasNext()){ String key = it.next(); if(key.equals('3')) cCMap.put(key+'c_map', 'c_map'); } //print the changed ConcurrentHashMap System.out.println('
ConcurrentHashMap after iterator: '+cCMap); } }
Излаз:
Почетна ЦонцуррентХасхМап: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ЦонцуррентХасхМап након итератора: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3ц_мап = ц_мап}
Имајте на уму да ако смо извршили исту операцију са ХасхМап-ом, тада би бацио ЦонцуррентМодифицатионЕкцептион.
Јава мапа вс ХасхМап
Хајде да табуларизујемо неке разлике између Мап и ХасхМап у Јави.
Мапа | ХасхМап |
---|---|
То је апстрактни интерфејс. | Је имплементација интерфејса Мап. |
Интерфејс треба да примене друге класе да би његова функционалност била доступна. | Да ли је конкретна класа и објекти класе се могу креирати да би се добила функционалност. |
Имплементација интерфејса мапе попут ТрееМап не дозвољава нулл вредности. | Омогућава нулл вредности и кључеве. |
ТрееМап не дозвољава двоструке вредности. | Може имати дуплиране вредности. |
Одржава се природно уређење предмета. | У ХасхМап-у се не одржава редослед уноса. |
Често постављана питања
П # 1) Зашто се ХасхМап користи у Јави?
Одговор: ХасхМап као колекција парова кључ / вредност помаже у претраживању података заснованих само на кључу. Такође, користећи технике хеширања, омогућава ефикасно тражење података.
К # 2)Како се креира хеш мапа?
Одговор: ХасхМап се може креирати инстанцирањем класе ‘ХасхМап’ пакета јава.утил. ХешМап са кључевима целог броја типа и вредностима низа типа може се креирати на следећи начин:
HashMap myMap= new HashMap();
К # 3)Да ли је ХасхМап наручен на Јави?
Одговор: Не, ХасхМап није наручен на Јави. У ту сврху се не користи на Јави, али се користи за чување елемената у паровима кључ / вредност.
К # 4)Да ли је ХасхМап заштићен нити?
Одговор: НЕ, хасхМап није заштићен нити у Јави.
К # 5)Шта је бржи ХасхМап или ЦонцуррентХасхМап?
Одговор: ХасхМап је бржи од ЦонцуррентХасхМап. Разлог је тај што ХасхМап обично ради само на једној нити, тако да су његове перформансе добре. Истовремена ХасхМап, међутим, као што и само име говори, истовремено је и може истовремено радити на више нити.
Закључак
У овом упутству смо разумели рад ХасхМап-а заједно са другом варијацијом ХасхМап-а која се зове ЦонцуррентХасхМап. Видели смо конструкторе, методе и примере ХасхМап-а. Такође смо разговарали о ЦонцуррентХасхМап заједно са његовим примером.
У нашим предстојећим водичима сазнаћемо више о Јава колекцијама.
=> Овде погледајте како бисте овде видели А-З Јава Водича за обуку.
Препоручено читање
- ЛинкедХасхМап у Јави - Пример и примена ЛинкедХасхМап
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- ТрееМап у Јави - Водич за примере Јава ТрееМап
- Шта је Јава Вецтор | Водич за Јава векторску класу са примерима
- Јава Стринг садржи () Водич за методе са примерима
- Како сортирати низ у Јави - Водич са примерима
- Назубљени низ у Јави - Водич са примерима
- Водич за класу Јава Сцаннер са примерима