2016-02-25 24 views
5

Java'da, TreeMap<K,V>, girişleri depolamak için bir RB-ağacı kullanır ve map.entrySet().iterator() kullanarak siparişi yinelemeye izin verirken, ekleme (log) (N) saatinde ekleme ve aramayı garanti eder. map.floorEntry(k), map.ceilingEntry(), map.lowerEntry(k) ve map.higherEntry():Java: TreeMap girişinden iterator?

TreeMap aynı zamanda belirli bir anahtar için üst ve alt sınırları bulmak için bir yöntem sağlar. Bununla birlikte, bunların dönüş değeri Map.Entry<K,V> örneğidir ve doğrudan komşu girişleri ziyaret etmesine izin vermez. Anahtarını veren varsayımsal bir girişin komşularını ziyaret etmek istedim.

Bir TreeMap girişinden bir yineleyici almanın ya da yapmaya çalıştığım şeyi yapmanın bir yolu var mı?

C++ 'ın std::map<K,V> sınıfında, ben

NOT Ben sürece olduğu gibi java.util en dışında bir konteyner kütüphane kullanan bir çözüme açığım ... Burada bir kayıp am daha alışık olmak Bazı makul zaman karmaşıklığı ile sıralanmış bir harita konteyneri garanti eder.

cevap

2

Map.Entry<K, V> döndürülen anahtarı tailMap(K fromKey) veya headMap(K toKey) parametresinde alabilir ve sonucu yineleyin.

+0

Neredeyse aradığım şey bu; Ancak, her iki anahtarın hemen önce ve hemen sonra gelen girdileri elde etmek istediğimi düşünürsek, her iki yöntemi de çağırmak zorundayım. Bu, CPU döngüleri kaybı gibi görünen iki arama anlamına gelir. – Shadocko

+0

Tamam, peki cevabını yanlış anlamışım, açıkçası map.tailMap (map.lowerEntry (k) .getKey()) 'anlamına geliyor. Bu işe yarıyor ama hala 2 arama gerektirir. – Shadocko

+0

Başka bir çözüm - ihtiyaçlarınız için TreeMap'in kendi yineleyicinizi yaptı, ancak bu kolay bir iş değil – Eva

İlgili konular