Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
Ва ин аст, ки чӣ тавр арзишҳоро бо калид ба даст овардан мумкин аст:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Агар ҳамаи гуфтаҳои боло равшан бошад, биёед ба ҷавобҳои худ ба саволҳои маъмул идома диҳем!
0. Чӣ тавр ба воситаи ҳамаи арзишҳои Харита такрор
Итератсия бар арзишҳо маъмултарин амалиётест, ки шумо бо харитаҳо иҷро мекунед. Ҳама ҷуфтҳои калид-арзиш дар интерфейси дохorи Map.Entry нигоҳ дошта мешаванд ва барои гирифтани онҳо шумо бояд баentrySet()
. Он Маҷмӯи ҷуфтҳоро бармегардонад, ки тавассути онҳо ҳал кардан мумкин аст:
for(Map.Entry<Integer, String> entry: map.entrySet()) {
// get key
Integer key = entry.getKey();
// get value
String value = entry.getValue();
}
Или используя итератор:
Iterator<Map.Entry<Integer, String>> itr = map.entrySet().iterator();
while(itr.hasNext()) {
Map.Entry<Integer, String> entry = itr.next();
// get key
Integer key = entry.getKey();
// get value
String value = entry.getValue();
}
1. Чӣ тавр табдил Харитаи ба рӯйхат
Интерфейси Map дорои 3 усулест, ки рӯйхати элементҳоро бармегардонад:- keySet() - маҷмӯи калидҳоро бар мегардонад;
- values() - Маҷмӯаи арзишҳоро бар мегардонад;
- entrySet () - маҷмӯи маҷмӯи арзишҳои калидиро бармегардонад.
ArrayList
, мебинед, ки конструктор бо аргументи навъи Collection мавҷуд аст. Азбаски Set насли Коллексия аст, натиҷаҳои ҳамаи усулҳои дар боло зикршударо метавон ба конструктори синф интиқол дод ArrayList
. Ҳамин тавр, мо рӯйхатҳои нав эҷод мекунем ва онҳоро бо арзишҳои зерин пур мекунем Map
:
// key list
List<Integer> keyList = new ArrayList<>(map.keySet());
// value list
List<String> valueList = new ArrayList<>(map.values());
// key-value list
List<Map.Entry<Integer, String>> entryList = new ArrayList<>(map.entrySet());
2. Чӣ тавр калидҳои харитаҳоро ҷудо кардан мумкин аст
Ҷудокунии харитаҳо инчунин як амалиёти хеле маъмул дар барномасозӣ мебошад. Шумо метавонед инро бо чанд роҳ иҷро кунед:-
Map.Entry -ро ба рӯйхат гузоред ва онро бо истифода аз Comparator ҷудо кунед .
Дар муқоисакунанда мо танҳо калидҳои ҷуфтҳоро муқоиса мекунем:
List
> list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() { @Override public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) { return o1.getKey() - o2.getKey(); } }); Агар шумо ламбдаҳоро фаҳмед, ин сабтро ба таври назаррас кӯтоҳ кардан мумкин аст:
Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
-
-ро истифода баред
SortedMap
, ё дақиқтараш, татбиқи онTreeMap
, ки дар созандаи худ Муқоисакунандаро мегирад. Ин муқоисакунанда ба калидҳои харита татбиқ карда мешавад, бинобар ин калидҳо бояд синфҳое бошанд, ки интерфейсро амалӣ мекунандComparable
:SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } });
Ва, албатта, ҳама чизро метавон бо истифода аз ламбдаҳо дубора навишт:
SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));
Баръакси усули аввал, бо истифода аз SortedMap, мо ҳамеша маълумотро дар шакли ҷудошуда нигоҳ медорем.
3. Чӣ тавр ба ҷудо кардани арзишҳои харита
Дар ин ҷо шумо бояд равиши монандро ба усули аввал барои калидҳо истифода баред - рӯйхати арзишҳоро гиред ва онҳоро дар рӯйхат ҷудо кунед:List <Map.Entry<Integer, String>> valuesList = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
@Override
public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
Ва ламбда барои ин чунин менамояд:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));
4. Фарқи байни HashMap, TreeMap ва Hashtable чист?
Тавре ки қаблан зикр гардид, 3 амалисозии асосии интерфейси Map вуҷуд дорад. Ҳар яке аз онҳо хусусиятҳои худро дорад:-
Тартиби элементҳо.
HashMap
ваHashtable
кафолат намедиҳед, ки ашё бо тартиби иловашуда нигоҳ дошта мешаванд. Илова бар ин, онҳо кафолат намедиҳанд, ки тартиби элементҳо бо мурури замон тағир намеёбад. Дар навбати худ,TreeMap
он нигоҳдории элементҳоро бо тартиби иловашуда ё мувофиқи муқоисаи додашуда кафолат медиҳад. -
Арзишҳои эътибор.
HashMap
ба шумо имкон медиҳад, ки калид ва арзиши сифр дошта бошед,HashTable
нест. TreeMap метавонад танҳо арзишҳои нулро истифода барад, агар муқоисакунанда иҷозат диҳад. Бе истифодаи муқоисакунанда (бо нигоҳ доштани ҷуфтҳо бо тартиби иловашуда), null иҷозат дода намешавад. -
Синхронизатсия. Танҳо
HashTable
ҳамоҳангшуда, боқимонда нестанд. Агар ба харита риштаҳои гуногун дастрас нашаванд, тавсия дода мешавад, ки ба ҷои HashTable HashMap -ро истифода баред.
HashMap | Ҷадвали Hash | TreeMap | |
---|---|---|---|
Тартиби элементҳо | Не | Не | Бале |
нул ҳамчун арзиш | Бале | Не | На дарвоқеъ |
Бехатарии ришта | Не | Бале | Не |
Мушкorи алгоритмии ҷустуҷӯи элементҳо | О(1) | О(1) | O(log n) |
Сохтори маълумот дар зери сарпӯш | ҷадвали ҳаш | ҷадвали ҳаш | дарахти сурх-сиёх |
5. Тарзи сохтани харитаи дутарафа
Баъзан истифодаи сохтори додаҳо лозим мешавад, ки дар он ҳам калидҳо ва ҳам арзишҳо беназир хоҳанд буд, яъне харита дорои ҷуфтҳои калидҳо мебошад. Ин сохтори додаҳо ба шумо имкон медиҳад, ки дар харита "намоиш/ҷустуҷӯи баръакс" эҷод кунед. Яъне, мо метавонем калидро аз рӯи арзиши он пайдо кунем.Ин сохтори додаҳо харитаи дуҷониба номида мешавад, ки мутаассифона, аз ҷониби JDK дастгирӣ намешавад. Аммо, хушбахтона, татбиқи онро дар коллексияҳои умумии Apache ё китобхонаҳои Гуава пайдо кардан мумкин аст. Дар он ҷо онро мутаносибан BidiMap ва BiMap меноманд. Ин татбиқҳо ба ягонагии калидҳо ва арзишҳо маҳдудиятҳо ҷорӣ мекунанд. Ин муносибати як ба якро ба вуҷуд меорад.6. Чӣ тавр сохтани Харитаи холӣ
Ду роҳи сохтани харитаи холӣ вуҷуд дорад:-
Оғозсозии an objectи муқаррарӣ:
Map<Integer, String> emptyMap = new HashMap<>();
-
Эҷоди харитаи холии тағирнашаванда:
Map<Integer, String> emptyMap = Collections.emptyMap();
UnsupportedOperationException
истисно. Дар ин мақола, мо ба саволҳои маъмултарине, ки шумо ҳангоми истифодаи интерфейси Map дошта метавонед, дида баромадем.
Боз чӣ бояд хонд: |
---|
GO TO FULL VERSION