私はHashMap
を必要とするか、FIFOキューのような作業要素の固定数(N)でMap
をあるSimpy。FIFO地図
要素番号が< = nになるまで、新しい要素は単にマップに入れられます。
要素番号>nの場合、最初に挿入された要素が削除され、最新のものがマップに入れられます。
Javaに類似したものがありますか、それとも実装する必要がありますか?
私はHashMap
を必要とするか、FIFOキューのような作業要素の固定数(N)でMap
をあるSimpy。FIFO地図
要素番号が< = nになるまで、新しい要素は単にマップに入れられます。
要素番号>nの場合、最初に挿入された要素が削除され、最新のものがマップに入れられます。
Javaに類似したものがありますか、それとも実装する必要がありますか?
次のようにあなたがLinkedHashMap
でこれを行うことができます。
new LinkedHashMap<K, V>(n) {
@Override protected boolean removeEldestEntry(Entry<K, V> entry) {
return size() > n;
}
};
を私は、Javaの冗長性は、その最高機能です側、日午前のよう...以下 私の作品:
public class FifoMap extends LinkedHashMap<String, String> {
int max;
/**
*
*/
private static final long serialVersionUID = 1L;
public FifoMap (int max){
super(max + 1);
this.max = max;
}
@Override
public String put (String key, String value) {
String forReturn = super.put(key, value);
if (super.size() > max){
removeEldest();
}
return forReturn;
}
private void removeEldest() {
Iterator <String> iterator = this.keySet().iterator();
if (iterator.hasNext()){
this.remove(iterator.next());
}
}
}
Google App Engineでも動作しますが、Entryクラスに問題があるようです。
この回答は私のためにしました。ビッグアップ@ゆりん – qualebs
これは、クラス、LinkedHashMapをサブクラス化せずに最も古いエントリを削除するための簡単な方法です。 –
@ TheOriginalAndroid?あなたはLinkedHashMapを絶対にサブクラス化しています。 –
スレッドセーフですか? – fuyou001