Kartanyň açar gymmaty jübütlerden ybarat gurluşly maglumatlardygyny we her açary diňe bir Kartada diňe bir gezek ulanyp boljakdygyny ýadyňyzdan çykarmaň . Bu mowzuk, Java-da Kartany ulanmak we ýerine ýetirilen synplar barada 9 sany esasy soragy öz içine alýar. Ityönekeýlik üçin mysallarda umumylaşdyrmalary ulanaryn . Şonuň üçin Kartany kesgitleýjini görkezmän, diňe Karta ýazaryn. Köne K we V iki bahany deňeşdirip boljakdygyny çaklap bilersiňiz , bu bolsa K deňeşdirilýär we V hem deňeşdirilýär .
0. Kartany sanawa öwürmek
Java-da Karta interfeýsi üç görnüşli kolleksiýa hödürleýär: açar toplumy, baha toplumy we açar bahasy toplumy. Olaryň hemmesini konstruktor ýa-da usul bilen Sanawa öwrüp bolýaraddAll()
. Aşakdaky kod parçasy , kartadan ArrayList ýasamagy görkezýär .
// list of keys
List keyList = new ArrayList(Map.keySet());
//list of values
List valueList = new ArrayList(Map.valueSet());
//list key-value
List entryList = new ArrayList(Map.entrySet());
1. Kartadaky ähli bahalary gözden geçiriň
Her bir möhüm bahaly jübütden ýöremek, Kartada gezmegiň iň esasy, esasy prosedurasydyr. Java-da her jübüt Map.Entry atly Map meýdançasynda saklanýar .Map.entrySet()
açar-gymmatlyklar toplumyny yzyna gaýtaryp berýär, şonuň üçin Kartanyň ähli gymmatlyklaryny gaýtalamagyň iň täsirli usuly:
for(Entry entry: Map.entrySet()) {
//get the key
K key = entry.getKey();
//get value
V value = entry.getValue();
}
Iterator
Esasanam JDK 1.5-den kiçi wersiýalarynda hem ulanyp bileris
Iterator itr = Map.entrySet().iterator();
while(itr.hasNext()) {
Entry entry = itr.next();
//get the key
K key = entry.getKey();
//get value
V value = entry.getValue();
}
2. Düwmeler boýunça karta sargyt etmek
Kartalary düwmeler boýunça tertiplemek, köplenç ulanylýan başga bir prosedura. Birinji ýol, Sanawa Map.Entry goşmak we bahalar boýunça tertipleýän deňeşdiriji ulanyp tertiplemek.List list = new ArrayList(Map.entrySet());
Collections.sort(list, new Comparator() {
@Override
public int compare(Entry e1, Entry e2) {
return e1.getKey().compareTo(e2.getKey());
}
});
Anotherene bir ýol: SortedMap ulanyň , üstesine-de açarlaryny tertipleşdirýär. Emma, ähli düwmeler Deňeşdirmäni öz içine almalydyr ýa-da deňeşdiriji tarapyndan kabul edilmelidir. Geçirilen sapaklaryň biri SortedMap
TreeMap . Konstruktory deňeşdirijini kabul edýär. Aşakdaky kod adaty kody nädip Map
sargyt edip boljakdygyny görkezýär.
SortedMap sortedMap = new TreeMap(new Comparator() {
@Override
public int compare(K k1, K k2) {
return k1.compareTo(k2);
}
});
sortedMap.putAll(Map);
3. Gymmatlyklar boýunça kartany sargyt ediň
Sanawa Karta goşmak we soňra tertiplemek bu ýagdaýda işleýär, ýöne bu gezek ulanmalyEntry.getValue()
. Aşakdaky kod öňküsi ýaly diýen ýaly.
List list = new ArrayList(Map.entrySet());
Collections.sort(list, new Comparator() {
@Override
public int compare(Entry e1, Entry e2) {
return e1.getValue().compareTo(e2.getValue());
}
});
Bu ýagdaýda henizem ulanyp bileris SortedMap
, ýöne diňe gymmatlyklar üýtgeşik bolsa. Bu ýagdaýda açar bahasy jübütini açar bahasyna öwrüp bilersiňiz. Bu çözgüdiň gaty çäklendirmeleri bar we men maslahat beremok.
4. Statik / üýtgewsiz Kartany başlamak
Kartanyň üýtgewsiz galmagyny isleseňiz, gowy usul ony üýtgewsiz Karta göçürmekdir. Bu gorag programmirleme usuly, diňe bir ulanmak üçin howpsuz bolman, eýsem sapakdan hem ygtybarly Kartany döretmäge kömek eder. Statik / üýtgewsiz Kartany başlatmak üçin başlangyç ulanyp bilerisstatic
(aşaga serediň). Bu kod bilen baglanyşykly mesele, Karta diýlip yglan edilse-de static final
, meselem, başlangyçdan soň hem işläp bileris Test.Map.put(3,"three");
. Şonuň üçin bu hakyky üýtgewsizlik däl. Statik başlangyjy ulanyp üýtgewsiz Kartany döretmek üçin bize iň soňky başlangyç ädiminde üýtgewsiz Karta goşjak super anonim synp gerek. Koduň ikinji bölegine serediň. Haçan-da ylgaýan bolsaňyz, goldanmaýan operasiýaExceptionTest.Map.put(3,"three");
zyňylar .
public class Test {
private static final Map Map;
static {
Map = new HashMap();
Map.put(1, "one");
Map.put(2, "two");
}
}
public class Test {
private static final Map Map;
static {
Map aMap = new HashMap();
aMap.put(1, "one");
aMap.put(2, "two");
Map = Collections.unmodifiableMap(aMap);
}
}
Guava kitaphanasy statiki we üýtgewsiz kolleksiýalary başlatmagyň dürli usullaryny hem goldaýar. Guawanyň üýtgewsiz kolleksiýalar peýdasynyň artykmaçlyklary barada has giňişleýin maglumat üçin Guava How-to-da üýtgewsiz kolleksiýalar bölümine serediň .
5. “HashMap”, “TreeMap” we “Hashtable” -iň arasyndaky tapawut
Java-da Karta interfeýsiniň üç esasy ýerine ýetirilişi bar : HashMap , TreeMap we Hashtable . Esasy tapawutlar aşakdakylar:- Geçiş tertibi “HashMap” we “HashTable” Kartanyň sargyt edilmegini kepillendirmeýär; esasanam buýrugyň wagtyň geçmegi bilen üýtgewsiz galjakdygyny kepillendirmeýärler. Itöne
TreeMap
ähli bahalary düwmeleriň "tebigy tertibi" ýa-da deňeşdiriji tarapyndan sargyt eder. - Dogry açar bahasy jübütleri.
HashMap
null açary we null bahasyna eýe bolmaga mümkinçilik berýär.HashTable
null açary ýa-da null bahasyna rugsat bermeýär. Tebigy tertip ulanylsaTreeMap
ýa-da deňeşdiriji null açara rugsat bermese, kadadan çykma bolar. - Sinhronizasiýa . Diňe
HashTable
sinhronlaşdyrylan, galanlary beýle däl. Emma, "sapakdan ygtybarly durmuşa geçirmek zerur bolmasa, ulanmak maslahat berilýärHashMap
"HashTable
.
. | HashMap | HashTable | TreeMap
-------------------------------------------------------
Упорядочивание |нет |нет | да
null в ключ-meaning | да-да | нет-нет | нет-да
синхронизировано | нет | да | нет
производительность | O(1) | O(1) | O(log n)
воплощение | корзины | корзины | красно-чёрное дерево
HashMap vs. gatnaşyklar barada has giňişleýin okaň . TreeMap vs. Hashtable vs. LinkedHashMap .
6. Ters gözleg / görnüş bilen karta
Käwagt, açar açar jübütleriň toplumy gerek, bu bolsa bahalaryň düwmeler ýaly özboluşlydygyny (ýeke-täk nagyş) aňladýar. Bu yzygiderlilik, Kartada "ters görnüş / gözleg" döretmäge mümkinçilik berýär. .Agny, açary onuň bahasy boýunça tapyp bileris. Bu maglumat gurluşyna iki taraplaýyn karta diýilýär , gynansakda JDK tarapyndan goldanylmaýar. “Apache” umumy kolleksiýalary we “Guava” degişlilikde BidiMap we BiMap atly iki taraplaýyn Kartany durmuşa geçirmegi teklip edýärler. Ikisi hem düwmeler bilen bahalaryň arasynda 1: 1 kartalaşdyrmagy üpjün edýän çäklendirmäni girizýärler.7. Kartanyň göçürme nusgasy
Hemmesi diýen ýaly, hemmesi bolmasa, Java-da Kartalar başga bir Karta üçin göçürme konstruktoryny öz içine alýar. Emma göçürmek prosedurasy sinhronlaşdyrylanok. Diýmek, bir sapak Kartany göçürende, başga bir sapak gurluşyny üýtgedip biler. Duýdansyz göçürme deshronizasiýasynyň öňüni almak üçin, şular ýaly ýagdaýda birini ulanmalyCollections.synchronizedMap()
.
Map copiedMap = Collections.synchronizedMap(Map);
Çuňňur göçürmegiň başga bir gyzykly usuly, ulanmak clone()
. Javaöne Java kolleksiýalarynyň çarçuwasyny dörediji Joşua Bloç hem maslahat bermeýär. " Göçüriji konstruktor vs. Klonirlemek " çekişmesinde ol pozisiýa eýeleýär: Sitata: "Men köplenç anyk synplarda köpçülige açyk klon usulyny hödürleýärin, sebäbi adamlar şol ýerde bolmagyna garaşýarlar. ... Klonirlemegiň bozulmagy utanç, ýöne bu bolup geçdi. ... Klonirlemek gowşak bir zat, adamlara çäklendirmeleri barada duýduryş berilmelidir öýdýärin. " clone()
Şol sebäpli, Kartany göçürmek usulyny nädip ulanmalydygyny hem görkezmeýärin
8. Boş Kartany dörediň
Üýtgemeýän bolsaMap
, ulanyň:
Map = Collections.emptyMap();
, A-da başga bir görnüşi ulanyň. Mysal üçin:
Map = new HashMap();
END
GO TO FULL VERSION