Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
Dan ini adalah cara untuk mendapatkan nilai dengan kunci:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Jika semua perkara di atas jelas, mari teruskan kepada jawapan kami kepada soalan popular!
0. Bagaimana untuk lelaran melalui semua nilai Peta
Mengulang nilai adalah operasi paling biasa yang anda lakukan dengan peta. Semua pasangan nilai kunci disimpan dalam antara muka Map.Entry dalaman, dan untuk mendapatkannya, anda perlu memanggilentrySet()
. Ia mengembalikan Set pasangan yang boleh digelung melalui:
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. Bagaimana untuk menukar Peta kepada Senarai
Antara muka Peta mempunyai 3 kaedah yang mengembalikan senarai elemen:- keySet() - mengembalikan Set kunci;
- values() - mengembalikan Koleksi nilai;
- entrySet() - mengembalikan Set set nilai kunci.
ArrayList
, anda akan melihat bahawa terdapat pembina dengan hujah jenis Collection. Memandangkan Set adalah keturunan Koleksi, hasil semua kaedah di atas boleh dihantar kepada pembina kelas ArrayList
. Jadi kami akan membuat senarai baharu dan mengisinya dengan nilai daripada 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 mengisih kekunci peta
Mengisih peta juga merupakan operasi yang agak biasa dalam pengaturcaraan. Anda boleh melakukan ini dalam beberapa cara:-
Letakkan Map.Entry ke dalam senarai dan susunkannya menggunakan Comparator .
Dalam pembanding kita akan membandingkan hanya 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(); } }); Jika anda memahami lambdas, entri ini boleh dipendekkan dengan ketara:
Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
-
Use
SortedMap
, atau lebih tepat lagi, its implementationTreeMap
, yang mengambil Comparator dalam pembinanya. Pembanding ini akan digunakan pada kekunci peta, jadi kunci mestilah kelas yang melaksanakan antara mukaComparable
:SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } });
Dan, sudah tentu, semuanya boleh ditulis semula menggunakan lambdas:
SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));
Tidak seperti kaedah pertama, menggunakan SortedMap, kami akan sentiasa menyimpan data dalam bentuk yang diisih.
3. Cara mengisih nilai peta
Di sini anda harus menggunakan pendekatan yang serupa dengan yang pertama untuk kunci - dapatkan senarai nilai dan susunkannya dalam senarai: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());
}
});
Dan lambda untuk ini kelihatan seperti ini:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));
4. Apakah perbezaan antara HashMap, TreeMap dan Hashtable
Seperti yang dinyatakan sebelum ini, terdapat 3 pelaksanaan utama antara muka Peta. Setiap daripada mereka mempunyai ciri-ciri sendiri:-
Susunan unsur.
HashMap
danHashtable
tidak menjamin bahawa item akan disimpan mengikut susunan ia ditambahkan. Di samping itu, mereka tidak menjamin bahawa susunan elemen tidak akan berubah dari semasa ke semasa. Sebaliknya,TreeMap
ia menjamin penyimpanan elemen dalam susunan ia ditambah atau mengikut pembanding yang diberikan. -
Nilai yang sah.
HashMap
membolehkan anda mempunyai kunci dan nilai nol,HashTable
tidak. TreeMap hanya boleh menggunakan nilai nol jika pembanding membenarkannya. Tanpa menggunakan pembanding (dengan menyimpan pasangan dalam susunan yang ditambah), null tidak dibenarkan. -
Penyegerakan. Hanya
HashTable
disegerakkan, selebihnya tidak. Jika peta tidak akan diakses oleh urutan yang berbeza, adalah disyorkan untuk menggunakan HashMap dan bukannya HashTable.
HashMap | HashTable | Peta Pokok | |
---|---|---|---|
Susunan unsur | Tidak | Tidak | ya |
null sebagai nilai | ya | Tidak | Tidak juga |
Keselamatan benang | Tidak | ya | Tidak |
Kerumitan algoritma mencari unsur | O(1) | O(1) | O(log n) |
Struktur data di bawah hud | jadual hash | jadual hash | pokok merah-hitam |
5. Cara membuat peta dwiarah
Kadang-kadang menjadi perlu untuk menggunakan struktur data di mana kedua-dua kunci dan nilai akan menjadi unik, iaitu, peta akan mengandungi pasangan kunci-kunci. Struktur data ini membolehkan anda membuat "pandangan/carian terbalik" pada peta. Iaitu, kita boleh mencari kunci mengikut nilainya. Struktur data ini dipanggil peta dua arah, yang malangnya, tidak disokong oleh JDK. Tetapi, mujurlah, pelaksanaannya boleh didapati di perpustakaan Apache Common Collections atau Guava. Di sana ia dipanggil BidiMap dan BiMap, masing-masing. Pelaksanaan ini mengenakan sekatan ke atas keunikan kunci dan nilai. Ini mewujudkan hubungan satu dengan satu.6. Cara membuat Peta kosong
Terdapat dua cara untuk membuat peta kosong:-
Permulaan objek biasa:
Map<Integer, String> emptyMap = new HashMap<>();
-
Mencipta peta kosong yang tidak boleh diubah:
Map<Integer, String> emptyMap = Collections.emptyMap();
UnsupportedOperationException
pengecualian. Dalam artikel ini, kami melihat soalan paling biasa yang mungkin anda ada semasa menggunakan antara muka Peta.
Apa lagi yang perlu dibaca: |
---|
GO TO FULL VERSION