Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
Lan iki carane entuk nilai kanthi kunci:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Yen kabeh ing ndhuwur wis jelas, ayo nerusake menyang jawaban kanggo pitakonan populer!
0. Carane iterate liwat kabeh Nilai Peta
Pengulangan nilai minangka operasi sing paling umum sing sampeyan lakoni nganggo peta. Kabeh pasangan kunci-nilai disimpen ing antarmuka Map.Entry internal, lan kanggo njaluk wong sampeyan kudu nelpon ingentrySet()
. Iki ngasilake Set pasangan sing bisa digulung liwat:
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. Carane Ngonversi Peta kanggo Dhaptar
Antarmuka Peta nduweni 3 cara sing ngasilake dhaptar unsur:- keySet () - ngasilake Set tombol;
- nilai () - ngasilake Koleksi nilai;
- entrySet () - ngasilake Set set kunci-nilai.
ArrayList
, sampeyan bakal sok dong mirsani sing ana konstruktor karo bantahan jinis Koleksi. Wiwit Set minangka turunan Koleksi, asil kabeh cara ing ndhuwur bisa diterusake menyang konstruktor kelas ArrayList
. Dadi kita bakal nggawe dhaptar anyar lan isi karo nilai saka 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. Cara ngurutake kunci peta
Ngurutake peta uga minangka operasi sing cukup umum ing pemrograman. Sampeyan bisa nindakake iki ing sawetara cara:-
Sijine Map.Entry menyang dhaptar lan urutake nggunakake Comparator .
Ing komparator kita bakal mbandhingake mung kunci pasangan:
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(); } }); Yen sampeyan ngerti lambdas, entri iki bisa disingkat:
Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
-
Gunakake
SortedMap
, utawa luwih tepat, implementasineTreeMap
, sing njupuk Comparator ing konstruktor. Komparator iki bakal ditrapake ing tombol peta, mula kunci kasebut kudu dadi kelas sing ngetrapake antarmukaComparable
:SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } });
Lan, mesthi, kabeh bisa ditulis maneh nggunakake lambdas:
SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));
Ora kaya cara pisanan, nggunakake SortedMap, kita bakal tansah nyimpen data ing wangun diurutake.
3. Cara ngurutake nilai peta
Ing kene sampeyan kudu nggunakake pendekatan sing padha karo sing pertama kanggo kunci - entuk dhaptar nilai lan urutake ing dhaptar: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());
}
});
Lan lambda kanggo iki katon kaya iki:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));
4. Apa bedane antarane HashMap, TreeMap, lan Hashtable
Kaya sing wis kasebut sadurunge, ana 3 implementasi utama antarmuka Peta. Saben wong duwe ciri dhewe:-
Urutan unsur.
HashMap
lanHashtable
ora njamin yen item bakal disimpen ing urutan padha ditambahake. Kajaba iku, padha ora njamin yen urutan unsur ora bakal ngganti liwat wektu. Ing siji,TreeMap
iku njamin panyimpenan saka unsur ing urutan padha ditambahake utawa sesuai karo comparator diwenehi. -
Nilai sing sah.
HashMap
ngidini sampeyan duwe tombol lan nilai null,HashTable
ora. TreeMap mung bisa nggunakake nilai null yen komparator ngidini. Tanpa nggunakake comparator (kanthi nyimpen pasangan ing urutan padha ditambahake), null ora diijini. -
Sinkronisasi. Mung
HashTable
diselarasake, liyane ora. Yen peta ora bakal diakses dening macem-macem Utas, disaranake nggunakake HashMap tinimbang HashTable.
HashMap | HashTable | TreeMap | |
---|---|---|---|
Urutan unsur | Ora | Ora | ya wis |
null minangka nilai | ya wis | Ora | Ora temenan |
Keamanan thread | Ora | ya wis | Ora |
Kompleksitas algoritma kanggo nggoleki unsur | O(1) | O(1) | O (log n) |
Struktur data ing ngisor hood | tabel hash | tabel hash | wit abang-ireng |
5. Carane nggawe peta bidirectional
Kadhangkala dadi perlu nggunakake struktur data ing ngendi loro tombol lan nilai bakal unik, yaiku, peta bakal ngemot pasangan kunci-kunci. Struktur data iki ngidini sampeyan nggawe "tampilan / telusuran terbalik" ing peta. Tegese, kita bisa nemokake kunci kanthi regane. Struktur data iki diarani peta bidirectional, sing sayangé ora didhukung dening JDK. Nanging, untunge, implementasine bisa ditemokake ing perpustakaan Apache Common Collections utawa Guava. Ing kana diarani BidiMap lan BiMap. Implementasi kasebut ngetrapake watesan babagan keunikan kunci lan nilai. Iki nggawe hubungan siji-kanggo-siji.6. Carane nggawe Peta kosong
Ana rong cara kanggo nggawe peta kosong:-
Inisialisasi obyek normal:
Map<Integer, String> emptyMap = new HashMap<>();
-
Nggawe peta kosong sing ora bisa diganti:
Map<Integer, String> emptyMap = Collections.emptyMap();
UnsupportedOperationException
pangecualian. Ing artikel iki, kita nliti pitakonan sing paling umum sing sampeyan duwe nalika nggunakake antarmuka Peta.
Apa maneh sing kudu diwaca: |
---|
GO TO FULL VERSION