2009-07-02 1 views
2

Usecase最後にn回訪問したURLのリストを保持します(nは修正番号です)。新しいURLがリストに追加されると、古いURLは(n個の要素でそれを保つために)自動的に削除され、それはコンパレータを受け入れる場合、データ構造は、時間によってソートする必要がサイズを維持し、古い要素をパージするデータ構造を探します。

要件は、(問題はないはず)。

答えて

3

javaでは、Queueの実装がいくつかあります。継承や反り既存の実装をして、このようなadd()メソッドを実装するために些細なことする必要があります

boolean add(E e) { 
    if(q.size()==MAX_SIZE) { 
    remove(); 
    } 
    q.add(e) 
} 
4

循環バッファが必要です。

最も古いURLを指すサイズNとインデックスkの配列b []を保持するだけです。新しいURLを追加する必要があるたびに、それをb [k]に割り当ててkをインクリメントし、必要に応じて値をラップします:k =(k + 1)%N.

すべてのURLは自然にソートされます。 kで、第2番目がk + 1で最も古いなど、最新のものはk-1である。 (シーケンスは配列の最後にラップされます)。

0

オーバーライドTreeSetを使用しても保存さURLためProxyを作成します訪問された時間。 Comparatorを作成するか、Comparableを実装し、equalshashCodeを上書きします。

オーバーライドするにはTreeSetthisが役に立ちます。

addメソッドをオーバーライドする必要があります。 addAllはおそらく必要ないので、UnsupportedOperationExceptionを投げることができます。

あなたは問題ないはずその後、あなたも再訪のURLのようなものを行うことができURLあたりまたはただ一つのエントリ(つまり、同じURLを指す異なるProxyURLsを意味する)、各訪問時に保存されます。これは、equals(対応するhashCode、それぞれcompare) メソッドの定義方法によって異なります。

をつけろ:TreeSetcompare平等性チェックのための方法およびない equalsメソッドを使用しています。

関連する問題