0

挿入順にトラバースする必要があるリストがあります。ただし、値に floorEntry と ceilingEntry を使用して「開始点」を見つけたいと考えています。

したがって、次の目的の操作を含むコレクションが必要です。

  1. 頻繁な挿入/末尾への追加
  2. 次のようにトラバースする必要があります。
    • すべての値を検索 >= または <= (床、天井)
    • 次に、これを挿入順にトラバースします
    • 条件に一致する各アイテムを削除します

したがって、コレクションは挿入順にソートする必要がありますが、ソートされた値に基づいてランダム アクセスする必要もあります。

LinkedSortedMap のようなものはありますか? しかし、これがうまくいくかどうかはわかりません。

リンクリスト内の値の最初の floorEntry() を見つけるにはどうすればよいですか? リンクリストからすべての floorEntries を見つけるにはどうすればよいですか?

==============言い換えれば=============================

//I have timeseries of Ints.
TimeSeries<Int> collection = new LinkedList<>()

/*
FindAndRemove is to remove first n Ints that are <= x
*/

FindAndRemove1(Int x,int n) {
  //return an iter to filtered subset of collection
  iter = collection.floorEntrySet(x) 
  for (int i =0; i<n; i++) {  
    iter.remove()   
    if (!iter.hasnext) break; 
    iter->next
}


FindAndRemove2(Int x,int n) { 
   //return an collection.iter to oldest Int that is <= x
   iter = collection.floorEntry(x) 
   for ( int i = 0; iter.hasnext; iter.next ) {  
      if ( iter.x > x ) 
        continue;

      iter.remove()
      if ( ++i > n ) break;
   }
}
4

1 に答える 1