Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
We açar bilen gymmatlyklary nädip almaly:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Aboveokardakylaryň hemmesi düşnükli bolsa, geliň meşhur soraglara jogaplarymyza geçeliň!
0. Maphli karta bahalary arkaly nädip gaýtalamaly
Gymmatlyklaryň üstünde durmak, kartalar bilen ýerine ýetirýän iň köp ulanylýan işiňizdir. Keyhli açar bahaly jübütler içerki Map.Entry interfeýsinde saklanýar we olary almak üçin jaň etmelientrySet()
. Aýlanyp boljak jübütler toplumyny yzyna gaýtaryp berýär:
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. Kartany nädip Sanawa öwürmeli
Karta interfeýsinde elementleriň sanawyny gaýtaryp berýän 3 usul bar:- keySet () - düwmeler toplumyny görkezýär;
- bahalar () - bahalar ýygyndysyny görkezýär;
- enterSet () - açar baha toplumynyň toplumyny görkezýär.
ArrayList
, “Collection” görnüşli argumentli konstruktoryň bardygyny görersiňiz. Set kolleksiýanyň nesli bolansoň, ýokardaky usullaryň hemmesini synpyň konstruktoryna geçirip bolýar ArrayList
. Şeýlelik bilen täze sanawlar dörederis we olary aşakdaky bahalar bilen doldurarys 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. Karta düwmelerini nädip tertipleşdirmeli
Kartalary tertiplemek programmirlemekde hem adaty bir iş. Muny birnäçe ýol bilen edip bilersiňiz:-
Map.Entry sanawa giriziň we Deňeşdiriji ulanyp tertipläň .
Deňeşdirijide diňe jübütleriň açarlaryny deňeşdireris:
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(); } }); Lambdalara düşünýän bolsaňyz, bu ýazgyny ep-esli gysgaldyp bolar:
Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
-
Konstruktorynda Deňeşdiriji alýan
SortedMap
ýerine ýetirişini ulanyň .TreeMap
Bu deňeşdiriji karta düwmelerine ulanylar, şonuň üçin düwmeler interfeýsi amala aşyrýan synplar bolmalyComparable
:SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } });
Elbetde, hemme zady lambdalar ulanyp täzeden ýazyp bolar:
SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));
SortedMap ulanyp, ilkinji usuldan tapawutlylykda, maglumatlary elmydama tertipli görnüşde saklarys.
3. Kartanyň bahalaryny nädip tertipleşdirmeli
Bu ýerde düwmeler üçin birinjisine meňzeş çemeleşmäni ulanmaly - bahalaryň sanawyny alyň we sanawda tertipläň: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());
}
});
Munuň üçin lambda şeýle görünýär:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));
4. HashMap, TreeMap we Hashtable arasynda näme tapawut bar?
Öň bellenip geçilişi ýaly, Karta interfeýsiniň 3 esasy ýerine ýetirilişi bar. Olaryň hersiniň öz aýratynlyklary bar:-
Elementleriň tertibi.
HashMap
weHashtable
zatlaryň goşulan tertipde saklanjakdygyna kepil geçmäň. Mundan başga-da, wagtyň geçmegi bilen elementleriň tertibiniň üýtgemezligini kepillendirmeýärler. Öz gezeginde,TreeMap
elementleriň goşulan tertipde ýa-da berlen deňeşdirijä laýyklykda saklanmagyny kepillendirýär. -
Dogry bahalar.
HashMap
açary we null bahasyna eýe bolmaga mümkinçilik berýär,HashTable
ýok. TreeMap, diňe deňeşdiriji rugsat berse, null bahalary ulanyp biler. Deňeşdiriji ulanmazdan (jübütleri goşulan tertipde saklamak bilen) null-a rugsat berilmeýär. -
Sinhronizasiýa. Diňe
HashTable
sinhronlaşdyrylan, galanlary beýle däl. Karta dürli sapaklar girip bilmese, HashTable ýerine HashMap ulanmak maslahat berilýär.
HashMap | HashTable | TreeMap | |
---|---|---|---|
Elementleriň tertibi | .Ok | .Ok | Hawa |
gymmaty hökmünde null | Hawa | .Ok | Aslynda beýle däl |
Tekstiň howpsuzlygy | .Ok | Hawa | .Ok |
Elementleri gözlemegiň algoritmiki çylşyrymlylygy | O (1) | O (1) | O (log n) |
Kapotyň aşagyndaky maglumatlar gurluşy | hash tablisasy | hash tablisasy | gyzyl-gara agaç |
5. Iki taraplaýyn kartany nädip döretmeli
Käwagt düwmeleriň we bahalaryň özboluşly boljak maglumat gurluşyny ulanmak zerur bolýar, ýagny kartada açar açar jübütleri bolar. Bu maglumat gurluşy, kartada “ters görnüş / gözleg” döretmäge mümkinçilik berýär. Valueagny, gymmaty boýunça açary tapyp bileris. Bu maglumat gurluşyna iki taraplaýyn karta diýilýär, gynansak-da, JDK tarapyndan goldanylmaýar. Emma, bagtymyza, ony durmuşa geçirmek Apache umumy ýygyndylarynda ýa-da Guava kitaphanalarynda tapylyp bilner. Ol ýerde degişlilikde BidiMap we BiMap diýilýär. Bu amallar, açarlaryň we gymmatlyklaryň özboluşlylygyna çäklendirmeler girizýär. Bu ýeke-täk gatnaşyk döredýär.6. Boş Kartany nädip döretmeli
Boş kartany döretmegiň iki ýoly bar:-
Adaty obýektiň başlangyjy:
Map<Integer, String> emptyMap = new HashMap<>();
-
Üýtgemez boş kartany döretmek:
Map<Integer, String> emptyMap = Collections.emptyMap();
UnsupportedOperationException
kadadan çykma. Bu makalada, Karta interfeýsini ulananyňyzda iň köp ýaýran soraglara göz aýladyk.
Başga näme okamaly: |
---|
GO TO FULL VERSION