Bir HashMap ile yineleme [yinelenen]


Al─▒nan cevaba git


Olas─▒ ├ço─čalt:
Bir 'Haritadaki' her giri┼č ├╝zerinde verimli bir ┼čekilde yineleme nas─▒l yap─▒l─▒r?

Bir ├Â─čedeki ├Â─čeleri yinelemenin en iyi yolu nedir HashMap ?


3215









Cevap say─▒s─▒n─▒ say: 7






entrySet() B├Âylece gibi yinelenir :

 public static void printMap(Map mp) {
    Iterator it = mp.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());
        it.remove(); // avoids a ConcurrentModificationException
    }
}
 

Hakk─▒nda daha fazla bilgi edinin Map .


3149







Yaln─▒zca anahtarlarla ilgileniyorsan─▒z keySet() , haritan─▒n i├žinden yineleme yapabilirsiniz :

 Map<String, Object> map = ...;

for (String key : map.keySet()) {
    // ...
}
 

Yaln─▒zca de─čerlere ihtiyac─▒n─▒z varsa kullan─▒n values() :

 for (Object value : map.values()) {
    // ...
}
 

Son olarak, hem anahtar─▒ hem de de─čeri istiyorsan─▒z, ┼čunu kullan─▒n entrySet() :

 for (Map.Entry<String, Object> entry : map.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    // ...
}
 

Bir uyar─▒: yinelemenin ortas─▒nda ├Â─čeleri kald─▒rmak istiyorsan─▒z, bunu bir Yineleyici arac─▒l─▒─č─▒yla yapman─▒z gerekir ( karim79'un cevab─▒na bak─▒n─▒z ). Ancak, ├Â─če de─čerlerini de─či┼čtirmek tamamd─▒r (bak─▒n─▒z Map.Entry ).


4560







Referanstan elde edildi Java'da Bir Harita ├ťzerinden Nas─▒l Yinelenir :

Map Java'da yineleme yapman─▒n birka├ž yolu vard─▒r . En yayg─▒n y├Ântemleri g├Âzden ge├žirelim ve avantajlar─▒n─▒ ve dezavantajlar─▒n─▒ g├Âzden ge├žirelim. Java t├╝m haritalar─▒n Harita arabirimini uygulamak i├žin, a┼ča─č─▒daki teknikler Herhangi bir harita uygulamas─▒ i├žin ├žal─▒┼čacak ( HashMap , TreeMap , LinkedHashMap , Hashtable , vb)

Y├Ântem # 1 : Her bir For d├Âng├╝s├╝ kullanarak giri┼čleri yineleme.

Bu en yayg─▒n y├Ântemdir ve ├žo─ču durumda tercih edilir. D├Âng├╝deki hem harita anahtarlar─▒na hem de de─čerlere ihtiyac─▒n─▒z varsa, kullan─▒lmal─▒d─▒r.

 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
 

Her d├Âng├╝ i├žin Java 5'te tan─▒t─▒ld─▒─č─▒ndan, bu y├Ântemin dilin yaln─▒zca yeni s├╝r├╝mlerinde ├žal─▒┼čt─▒─č─▒n─▒ unutmay─▒n. Ayr─▒ca NullPointerException bo┼čtaki bir harita ├╝zerinde yineleme yapmaya ├žal─▒┼č─▒rsan─▒z, her bir d├Âng├╝ i├žin at─▒l─▒r, bu nedenle yinelemeden ├Ânce her zaman bo┼č ba┼čvurular─▒ kontrol etmelisiniz.

Y├Ântem # 2 : Her bir For d├Âng├╝s├╝ kullanarak anahtarlar veya de─čerler ├╝zerinde yineleme.

Yaln─▒zca haritadaki tu┼člara veya de─čerlere ihtiyac─▒n─▒z varsa, keySet veya inputSet yerine de─čerler ├╝zerinde yineleme yapabilirsiniz.

 Map<Integer, Integer> map = new HashMap<Integer, Integer>();

// Iterating over keys only
for (Integer key : map.keySet()) {
    System.out.println("Key = " + key);
}

// Iterating over values only
for (Integer value : map.values()) {
    System.out.println("Value = " + value);
}
 

Bu y├Ântem, entrySet yinelemeye g├Âre hafif bir performans avantaj─▒ sa─člar (yakla┼č─▒k% 10 daha h─▒zl─▒) ve daha temizdir.

Y├Ântem # 3 : Yineleyiciyi kullanarak yineleme.

Jenerik kullan─▒m─▒:

 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry<Integer, Integer> entry = entries.next();
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
 

Jeneriksiz:

 Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry entry = (Map.Entry) entries.next();
    Integer key = (Integer)entry.getKey();
    Integer value = (Integer)entry.getValue();
    System.out.println("Key = " + key + ", Value = " + value);
}
 

Ayr─▒ca, yineleme keySet veya de─čerler i├žin ayn─▒ tekni─či kullanabilirsiniz .

Bu y├Ântem gereksiz g├Âr├╝nebilir, ancak kendine ├Âzg├╝ avantajlar─▒ vard─▒r. Her ┼čeyden ├Ânce, Java'n─▒n eski s├╝r├╝mlerinde bir harita ├╝zerinde yineleme yapman─▒n tek yolu budur. Di─čer ├Ânemli ├Âzellik, yineleme s─▒ras─▒nda arayarak giri┼čleri haritadan kald─▒rman─▒za izin veren tek y├Ântem olmas─▒d─▒r iterator.remove() . Bunu Her Bir yineleme s─▒ras─▒nda yapmaya ├žal─▒┼č─▒rsan─▒z, Javadoc'a g├Âre "├Âng├Âr├╝lemeyen sonu├žlar" al─▒rs─▒n─▒z .

Performans a├ž─▒s─▒ndan, bu y├Ântem Her Bir yinelemeye e┼čittir.

Y├Ântem # 4 : Anahtarlar─▒ yineleme ve de─čer arama (verimsiz).

 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
    Integer value = map.get(key);
    System.out.println("Key = " + key + ", Value = " + value);
}
 

Bu, # 1 y├Ântemi i├žin daha temiz bir alternatif gibi g├Âr├╝nebilir, ancak pratikte bir anahtarla de─čer almak zaman al─▒c─▒ olabilece─činden olduk├ža yava┼č ve verimsizdir (farkl─▒ Harita uygulamalar─▒nda bu y├Ântem, # 1 y├Ânteminden% 20 -% 200 yava┼čt─▒r. ). FindBug'lar kurulu ise, bunu alg─▒lar ve verimsiz yineleme konusunda sizi uyar─▒r. Bu y├Ântemden ka├ž─▒n─▒lmal─▒d─▒r.

Sonu├ž:

Haritadaki yaln─▒zca tu┼člara veya de─čerlere ihtiyac─▒n─▒z varsa, 2 numaral─▒ y├Ântemi kullan─▒n. Java'n─▒n daha eski bir s├╝r├╝m├╝yle (5'ten k├╝├ž├╝k) kalm─▒┼čsan─▒z veya yineleme s─▒ras─▒nda giri┼čleri kald─▒rmay─▒ planl─▒yorsan─▒z, # 3 y├Ântemini kullanman─▒z gerekir. Aksi halde # 1 y├Ântemini kullan─▒n.


818







 for (Map.Entry<String, String> item : hashMap.entrySet()) {
    String key = item.getKey();
    String value = item.getValue();
}
 

159







Giri┼čleri Map birka├ž ┼čekilde yineleyebilirsiniz . Her bir anahtar─▒ ve bu ┼čekilde de─čer al─▒n:

 Map<?,?> map = new HashMap<Object, Object>();
for(Entry<?, ?> e: map.entrySet()){
    System.out.println("Key " + e.getKey());
    System.out.println("Value " + e.getValue());
}
 

Veya ile tu┼člar─▒n listesini alabilirsiniz.

 Collection<?> keys = map.keySet();
for(Object key: keys){
    System.out.println("Key " + key);
    System.out.println("Value " + map.get(key));
}
 

Yaln─▒zca t├╝m de─čerleri almak istiyorsan─▒z ve tu┼člarla ilgilenmiyorsan─▒z, ┼čunlar─▒ kullanabilirsiniz:

 Collection<?> values = map.values();
 

97







Daha ak─▒ll─▒:

 for (String key : hashMap.keySet()) {
    System.out.println("Key: " + key + ", Value: " + map.get(key));
}
 

66







Ba─čl─▒. Her giri┼čin hem anahtar─▒na hem de de─čerine ihtiyac─▒n─▒z olaca─č─▒n─▒ biliyorsan─▒z, o zaman ilerleyin entrySet . Sadece de─čerlere ihtiyac─▒n─▒z varsa, o zaman values() y├Ântem var. Ve sadece anahtarlara ihtiyac─▒n─▒z varsa, kullan─▒n keyset() .

K├Ât├╝ bir uygulama t├╝m anahtarlar─▒n i├žinde yinelenmek ve sonra d├Âng├╝ i├žinde her zaman map.get(key) de─čeri elde etmek olacakt─▒r. Bunu yap─▒yorsan─▒z, yazd─▒─č─▒m ilk se├ženek sizin i├žin.


46



─░lgili yay─▒nlar


Nesne ├Âzellikleri aras─▒nda yineleme

Bir Koleksiyonda yineleme, d├Âng├╝deki nesneleri kald─▒r─▒rken ConcurrentModificationException ├Â─česinden ka├ž─▒nma

Paralel olarak iki listeyi nas─▒l yineleyebilirim?

Python'da bir dizi tarih boyunca yineleme

Ruby'deki bir diziyi yinelemenin ÔÇťdo─čruÔÇŁ yolu nedir?

SparseArray ile yineleme nas─▒l yap─▒l─▒r?

Java'da bir dize karakterlerini yinelemenin en kolay / en iyi / en do─čru yolu nedir?

Bir anahtar─▒ yineleme yaparken HashMap'ten nas─▒l kald─▒r─▒r─▒m? [├žift]

JSONArray ├╝zerinden yineleme yapmak m├╝mk├╝n m├╝d├╝r? [├žift]

Python listesindeki ├Â─če ├žiftleri aras─▒nda yineleme [yinelenen]

Etiketle ilgili di─čer sorular [java]


Node.js module.exports'in amac─▒ nedir ve bunlar─▒ nas─▒l kullan─▒yorsunuz?

T├╝r ad─▒ndan sonraki parantezler yeniyle fark yarat─▒r m─▒?

Uzak dosyalar─▒n ├╝zerine yazmak i├žin "git push" ─▒ zorla

Dizi boyutunun 1'den b├╝y├╝k oldu─ču belgeler i├žin sorgu

Bir de─čere kar┼č─▒ birden fazla de─či┼čken nas─▒l test edilir?

MySQL'de bir veritaban─▒ veya tablo i├žin dizinleri nas─▒l g├Ârebilirim?

Bir ├Â─čenin t├╝m olu┼čumlar─▒n─▒ listedeki nas─▒l bulabilirim?

node.js bir klas├Ârdeki t├╝m dosyalar─▒ gerektirir?

Maven deposunda Oracle JDBC s├╝r├╝c├╝s├╝n├╝ bulun

python'─▒n node.js e┼čde─čeri e─čer __name__ == '__main__' [duplicate]