2011-07-06 9 views
5

BenLinkedHashMap'te belirli bir tuştan başlayarak nasıl yineleyebilirim?

Stock 
{ 
    String Symbol; 
    LinkedHashMap<Date,Double> DateForPrice; 
} 

Ben LinkedHashMap tanıdığım bir veri yapısını varsa, ben bütün listesinde geçiş olmadan belirli bir tarihte stok fiyat alabilirsiniz.

Ancak, belirli bir tarih, bütün liste geçiş olmadan bunu yapmak için herhangi bir yolu vardır başlayarak DateForPrice ait LinkedHashMap arasında yineleme isterseniz?

+2

sen atlayabilirsiniz bile Belirli bir yer, bir "LinkedHashMap" iterasyon emri, * ekleme emri * olacaktır, anahtarların doğal sırası değil; istediğin bu mu? –

+0

Evet, istediğim bu. Hisse senedi fiyatı tarihe göre eklenecektir. –

cevap

0

yerine TreeMap kullanmayı öneririm - bu tarihe göre sıralanır ve

7

LinkedHashMap onun sipariş görünümde ortasında yineleme başlatmak için bir yol sunmaz gerekli parçasında almak için tailMap kullanabilirsiniz haritanın verilerinin sizin kullanım örneğini Supposing bazı Date d sonra ve tüm tarihleri ​​istiyorum gerçekten bu yineleme, o zaman muhtemelen TreeMap olarak haritanızı saklamalısınız. Burada önemli bir fark, LinkedHashMap 'un siparişinin ekleme siparişi olması ve sözde kullanım durumumuzun anahtar siparişi olmasını istemektir. TreeMap, haritanın içeriğini haritanın anahtarına göre sıralayarak böyle bir görünümü korur.

TreeMap s karaktere bağlı olarak haritanın dilim oluşturmak için izin ek yarar var, yani bütün tuşlar k sonrası olmak üzere haritayı döndürmek için, tailMap(K k) çağırabilir. Bu durumda, d başlangıç ​​noktanız ile tailMap numaralı telefonu arayabilirsiniz.

ör .:

TreeMap<Date, Double> dateForPrice; 

// load up dateForPrice 

Date start = // the point to start your iteration 

for(Entry<Date, Double> entry : dateForPrice.tailMap(start).entrySet()){ 
    // loop code 
} 

tailMap yöntem iterable olmadığı, SortedMap döndürür. Ancak Iterable'un alt yüzü olan Set döndüren entrySet yöntemine sahiptir.

Uygun, size basitçe (tabii bazı performans arasında denge ile) mevcut örneğiyle bir TreeMap yükleyebilirsiniz bir LinkedHashMap verilerinizi depolamak tutmak istiyorsanız:

TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice); 
+0

tailMap ek olarak() Eğer (toKey Nesne, Nesne fromKey) subMap kullanabilirsiniz, isterseniz oluşturduğunuz yeni harita bağlı için. http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeMap.html –

+1

1: gerçekten bulmak istediğiniz olduğu söz değer herhangi NavigableMap örn TreeMap. –