Sun'ın LinkedHashMaps için kaynak koduna baktığımda, KeyIterator adlı özel bir sınıf olduğunu görüyorum, bunu kullanmak istiyorum. Nasıl erişim kazanabilirim?Bir LinkedHashMap için nasıl bir anahtar tanımlayıcısı alabilirim?
cevap
Sen
myMap.keySet().iterator();
hatta varlığını bilmek gerekir olmamalıdır arayarak olsun; Bu sadece uygulamanın bir eseri. Bildiğiniz her şey için, anahtarları tekrarlamak için uçan maymunları kullanıyor olabilirler; Spesifikasyona göre yinelendikleri sürece, nasıl yaptıklarının önemi yoktur. Bu arada
, sen HashMap
KeyIterator
denilen özel sınıfa sahip olduğunu biliyor muydunuz (yapın ConcurrentHashMap
, ConcurrentSkipListMap
, EnumMap
, IdentityHashMap
, TreeMap
ve WeakHashMap
)?
Bu, HashMap
anahtarıyla nasıl geçiş yaptığınızda fark yaratır mı?
Düzenleme: Yorumunuza Yanıtı, bir Map
içinde tüm anahtar-değer çiftleri üzerinde yineleme çalışıyorsanız unutmayın, tuşların üzerinde yineleme ve aramaya daha iyi bir yol yoktur Her biri için get
. entrySet()
yöntemi, daha sonra yineleyebileceğiniz tüm anahtar/değer çiftlerini Set
alır. Bunun yerine yazma:
for (Key key : myMap.keySet()) {
Value val = myMap.get(key);
...
}
yazman gereken: İsterseniz
for (Map.Entry<Key, Value> entry : myMap.entrySet()) {
doSomethingWithKey(entry.getKey());
doSomethingWithValue(entry.getValue());
...
}
Ayrıca values()
ile değerlerle tekrarlayabilirsiniz. keySet
, entrySet
ve values
Map
interface tanımlanan olduğu için ikisi de değil, sadece LinkedHashMap
herhangi Map
için çalışacağını
Not.
Sen LinkedHashMap iç uygulaması kapsamında tanımlanan (kaynak kodunda yani ama API tanımlanmayan) olduğu şey kullanmamalısınız. Bir sonraki sürümde dahili uygulama değişirse ne olur? Bunu kullanarak tüm kodunuz kırılacak.
Sen API için kod ve
myMap.keySet().iterator()
doğrudan kullanamaz, bu yüzden özel sınıf gibi bir şeyler yapmalıyım.
Normal Yineleyici kullandığınızda, bunun bir örneği döndürülür.
- 1. Sıralama LinkedHashMap Ben onun değerleri LinkedHashMap String ve Integer içerdiğini verilen dayalı bir LinkedHashMap sıralayabilir nasıl
- 2. Anahtarın yanı sıra anahtar için bir anahtardaki değeri nasıl alabilirim?
- 3. App Engine tanımlayıcısı. Anahtar vs Kimlik
- 4. Sertifikanın anahtar boyutunu nasıl alabilirim
- 5. Bilgisayarın benzersiz bir tanımlayıcısı nasıl edinilir?
- 6. Bir anahtar dizisi kullanarak hash değerlerini nasıl alabilirim?
- 7. "ostream" tanımlayıcısı tanımlanmamış bir hata
- 8. Bir anahtarı bir SSL sertifikasından nasıl alabilirim?
- 9. Bir işlevin benzersiz bir tanımlayıcısı nasıl elde edilir
- 10. LinkedHashMap <string, LinkedHashMap <string, string >> nasıl görüntülenebilir
- 11. nasıl bir birincil anahtar
- 12. linkedhashmap öğesinin ilk öğesini alın
- 13. Verileri bir tablonun içine nasıl ekleyebilirim ve bir yabancı anahtar olarak başka bir tabloya yerleştirmek için birincil anahtarı nasıl alabilirim?
- 14. Tablo nasıl yabancı bir anahtar için başvuruyor
- 15. Anahtar için bir değer nasıl oluşturulur
- 16. bir anahtar
- 17. Değer eklerken bir tablodan nasıl bilgi alabilirim?
- 18. Linux'ta bir dosya için yalnızca bir inode numarasını nasıl alabilirim?
- 19. PHP'de bir dize için bir hex dökümü nasıl alabilirim?
- 20. UIImage'ı bir CGContextRef'den nasıl alabilirim?
- 21. XDocument'den nasıl bir NameTable alabilirim?
- 22. Bir URL başlığı nasıl alabilirim
- 23. Bir AttributeSet'ten nasıl güvenilir bir renk alabilirim?
- 24. Bir AlertDialog'dan sonuçları nasıl alabilirim?
- 25. Bir domuz haritasından bir değişken anahtar için değer nasıl alınır?
- 26. Bir web dizini url'sinden nasıl veri alabilirim?
- 27. Maven projem için bir jnlp oluşturmak için nasıl alabilirim?
- 28. Bir ContentPresenter'ın Çocuklarını nasıl alabilirim?
- 29. Bir div metnini nasıl alabilirim?
- 30. ABRecordRef'in tüm özelliklerinin bir listesini nasıl alabilirim?
Yalnızca iç özel sınıfı görünceye kadar LinkedHashMap üzerinde yineleyebileceğim bir şey olmadı. Cevabınız için teşekkürler. –
Hangi kullanımının entrySet() olduğunu bilmiyordum. Ama, hemen hemen her yerde onun gerçekten yararlı i HashMap kullanın. Teşekkür @Michael – sravanreddy001