1. Bir dizi anahtar/değer çifti.

Java'da, başka bir ilginç koleksiyon (geniş anlamda) Map. Bazen bu veri yapısına sözlük de denir.
Koleksiyona benzer Set, ancak bir dizi öğe yerine bir dizi öğe "çifti" depolar. a'daki her bir çift Mapiki öğeden oluşur: bir "anahtar" ve bir "değer".
Diyelim ki programınızın çalışan adlarını ve maaşlarını veya iş arkadaşlarınızın adlarını ve yaşlarını saklamasını istiyorsunuz. O zaman şöyle bir tabloya ihtiyacınız olacak:
| İsim | Yaş |
|---|---|
| Elon | 21 |
| Jeff | 22 |
| Fatura | 48 |
| Warren | ? |
Her satır birkaç değer içerir. Adı çiftin anahtarı olarak ve yaşı çiftin değeri olarak anacağız .
Bu çiftlerin tamamı bizim haritamızdır ( Map).
Bir çiftin anahtarı dışında herhangi bir şey olabilir null. Anahtarlar benzersiz olmalıdır: bir harita iki özdeş anahtar içeremez.
2. HashMapsınıf
Sınıf HashMap, en popüler koleksiyon türüdür Map. Bir yandan HashSet'e çok benzer ve tüm yöntemlerine sahiptir. ArrayListÖte yandan, indeksleri olarak sözcükleri (veya başka herhangi bir şeyi) kullanabilen bir liste ( ) gibidir .
HashMapBunun gibi bir ifadeyi kullanarak oluşturabilirsiniz :
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
KeyTypeDepolanan çiftlerdeki anahtarların türü ve ValueTypekoleksiyonda depolanan çiftlerdeki değerlerin türü nerede HashMap.
Sınıfın HashMapaşağıdaki gibi yöntemleri vardır:
| Yöntem | Tanım |
|---|---|
|
( key, value) çiftini koleksiyona ekler |
|
Bir anahtarla ilişkili değeri döndürür. |
|
Koleksiyonda bir anahtarın olup olmadığını kontrol eder |
|
Koleksiyonda bir değerin varlığını kontrol eder |
|
Koleksiyondan bir öğeyi kaldırır |
|
Tüm öğeleri kaldırarak koleksiyonu temizler |
|
Koleksiyondaki anahtar/değer çiftlerinin sayısını döndürür |
|
Koleksiyondaki anahtar kümesini döndürür |
|
Koleksiyonun öğelerini içeren bir küme döndürür |
|
Koleksiyondaki Settüm çiftlerin ( ) kümesini ( ) döndürür .Map.Entry |
Bir öğeye öğe eklemeHashMap
Öğeler, yöntem kullanılarak bir haritaya çiftler halinde eklenir put(). Anahtar ilk bağımsız değişken olarak iletilir ve değer ikinci olarak iletilir.
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);
Bir anahtar/değer çifti eklerken, anahtar koleksiyonda zaten varsa eski değer yeni değerle değiştirilir.
Bu davranış, indeksleri sayılar yerine HashMapkelimeler ( ) olan bir dizi veya liste yapar.String
Hemen hemen her tür KeyType veya ValueType olabilir. KeyType için bazı küçük ek gereksinimler vardır ve Java Collections görevinde koleksiyonları daha ayrıntılı olarak incelediğinizde bunları öğreneceksiniz.
3. a'nın alt kümeleri HashMap: anahtar kümesi
HashMapDiyelim ki a içindeki tüm girişleri ekranda görüntülemek istiyoruz . Bunu nasıl yapabiliriz? Bunu yapmak için, HashMap. Bu birkaç yolla yapılabilir.
En kolay yol, tuşların üzerinden geçmektir.
HashMapgirişler sırayla numaralandırılmaz, bu nedenle sayaçlı bir döngü burada çalışmaz. Ancak, yöntemi kullanarak bir dizi anahtar elde edebiliriz keySet()ve zaten bir dizi üzerinde nasıl yineleme yapacağınızı biliyorsunuz:
| kod | Tanım |
|---|---|
|
mapAnahtarla ilişkili değeri al'ın anahtarları üzerinde döngü yapın |
Yöntem keySet()bir dizi anahtar döndürür. Bu seti iki şekilde kullanabilirsiniz:
| Kompakt notasyon | Uzun gösterim |
|---|---|
|
|
4. Anahtar-değer çiftleri üzerinde döngü
MapDaha karmaşık bir yol da var: a'yı bir anahtar/değer çiftleri kümesine dönüştürebilir ve daha önce öğrendiğimiz gibi, kümenin öğeleri üzerinde döngü yapabilirsiniz.
Koleksiyon, HashMapbir anahtar/değer çiftini depolayan bir yardımcı sınıfa sahiptir. Yaklaşık olarak şuna benziyor:
class Entry<KeyType, ValueType>
{
private KeyType key;
private ValueType value;
public KeyType getKey()
{
return this.key;
}
public ValueType getValue()
{
return this.value;
}
}
entrySet()Yöntemi bir nesne üzerinde çağırmanın sonucu şöyle olacaktır :HashMap<KeyType, ValueType>Set<Entry<KeyType, ValueType>>
Set<Entry<KeyType, ValueType>> name = map.entrySet();
Burada, bir tür parametresine sahip genel sınıfa sahibiz Set, bu da Entryiki tür parametreye sahip genel bir tür ( ) olur.
Yeni başlayan birinin bu konuda kafası karışması çok kolaydır. Ancak bir kez anladığınızda, şöyle bir kod yazabilirsiniz:
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for(Map.Entry<String, Integer> pair: entries)
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Bununla birlikte, bu kod biraz basitleştirilebilir:
Öncelikle, for için ayrı bir değişken oluşturmayı atlayabilir entriesve bunun yerine entrySet()yöntemi doğrudan fordöngünün içinden çağırabilirsiniz:
for(Map.Entry<String, Integer> pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
İkinci olarak, anahtar/değer çiftininvar türünü otomatik olarak anlamak için yakın zamanda tanıtılan işleci kullanabilirsiniz :
for(var pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Fena değil, ha?
5. Karşılaştırma ArrayListveHashMap
A, dizelerin (veya diğer türlerin) dizinler (anahtarlar) olarak kullanılmasına izin veren HashMapan'a çok benzer .ArrayList
Integera'daki anahtarlar için kullanırsanız HashMap, a'ya daha da benzer hale gelir ArrayList. Hadi karşılaştıralım:
| ArrayList<String> ile Kodlama | HashMap<Integer, String> ile kodlayın |
|---|---|
|
|
GO TO FULL VERSION