Usecase最後にn回訪問したURLのリストを保持します(nは修正番号です)。新しいURLがリストに追加されると、古いURLは(n個の要素でそれを保つために)自動的に削除され、それはコンパレータを受け入れる場合、データ構造は、時間によってソートする必要がサイズを維持し、古い要素をパージするデータ構造を探します。
要件は、(問題はないはず)。
Usecase最後にn回訪問したURLのリストを保持します(nは修正番号です)。新しいURLがリストに追加されると、古いURLは(n個の要素でそれを保つために)自動的に削除され、それはコンパレータを受け入れる場合、データ構造は、時間によってソートする必要がサイズを維持し、古い要素をパージするデータ構造を探します。
要件は、(問題はないはず)。
javaでは、Queueの実装がいくつかあります。継承や反り既存の実装をして、このようなadd()メソッドを実装するために些細なことする必要があります
boolean add(E e) {
if(q.size()==MAX_SIZE) {
remove();
}
q.add(e)
}
循環バッファが必要です。
最も古いURLを指すサイズNとインデックスkの配列b []を保持するだけです。新しいURLを追加する必要があるたびに、それをb [k]に割り当ててkをインクリメントし、必要に応じて値をラップします:k =(k + 1)%N.
すべてのURLは自然にソートされます。 kで、第2番目がk + 1で最も古いなど、最新のものはk-1である。 (シーケンスは配列の最後にラップされます)。
は、サイズのcircular buffern
オーバーライドTreeSet
を使用しても保存さURL
ためProxy
を作成します訪問された時間。 Comparator
を作成するか、Comparable
を実装し、equals
とhashCode
を上書きします。
オーバーライドするにはTreeSet
thisが役に立ちます。
add
メソッドをオーバーライドする必要があります。 addAll
はおそらく必要ないので、UnsupportedOperationException
を投げることができます。
あなたは問題ないはずその後、あなたも再訪のURLのようなものを行うことができURLあたりまたはただ一つのエントリ(つまり、同じURLを指す異なるProxyURLsを意味する)、各訪問時に保存されます。これは、equals
(対応するhashCode
、それぞれcompare
) メソッドの定義方法によって異なります。
をつけろ:TreeSet
はcompare
平等性チェックのための方法およびない equalsメソッドを使用しています。