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 Map
iki öğ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. HashMap
sı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 .
HashMap
Bunun gibi bir ifadeyi kullanarak oluşturabilirsiniz :
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
KeyType
Depolanan çiftlerdeki anahtarların türü ve ValueType
koleksiyonda depolanan çiftlerdeki değerlerin türü nerede HashMap
.
Sınıfın HashMap
aş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 Set tü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 HashMap
kelimeler ( ) 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
HashMap
Diyelim 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.
HashMap
giriş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 |
---|---|
|
map Anahtarla 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ü
Map
Daha 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, HashMap
bir 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 Entry
iki 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 entries
ve bunun yerine entrySet()
yöntemi doğrudan for
dö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 ArrayList
veHashMap
A, dizelerin (veya diğer türlerin) dizinler (anahtarlar) olarak kullanılmasına izin veren HashMap
an'a çok benzer .ArrayList
Integer
a'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