7

データ構造がある場合

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

LinkedHashMap では、リスト全体を走査しなくても特定の日付の株価を取得できることがわかっています。

ただし、特定の日付から始まる DateForPrice の LinkedHashMap を繰り返し処理したい場合、リスト全体を走査せずにそれを行う方法はありますか?

4

2 に答える 2

9

LinkedHashMapマップのデータの順序付けられたビューの途中で反復を開始する方法を提供しません。あなたのユースケースが実際にいくつかの後のすべての日付Date dが必要であり、それらを繰り返すと仮定すると、おそらくマップを として保存する必要がありますTreeMap。ここでの重要な違いは、LinkedHashMapの順序が挿入順序であるということです。ここで想定される使用例は、自然なキー順序が必要な場合です。TreeMaps は、そのようなビューを維持し、マップの内容をマップのキーでソートします。

TreeMapには、キーに基づいてマップのスライスを作成できるという追加の利点があるため、 を呼び出しtailMap(K k)て、 の後に発生するすべてのキーを含むマップを返すことができますk。この場合、tailMap開始点で呼び出すことができますd

例えば:

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メソッドは を返しますがSortedMap、これは反復可能ではありません。しかし、のサブインターフェースである returnentrySetメソッドがあります。SetIterable

便利なことに、データを に保存し続けたい場合は、現在のインスタンスで をLinkedHashMapロードするだけですTreeMap(もちろん、パフォーマンスのトレードオフがあります)。

TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);
于 2011-07-06T02:52:00.207 に答える
0

代わりに使用することをお勧めしますTreeMap-日付でソートされtailMap、必要な部分を取得するために使用できます

于 2011-07-06T02:51:27.667 に答える