2013-06-07 14 views
7

muszę HashMap lub simpy Map się z określonej liczby elementów (n) pracuje jak FIFO kolejce.FIFO Mapa z ograniczonymi elementów

Tak więc do momentu, gdy numer elementu to < = n nowe elementy są po prostu umieszczane na mapie.

Dla numeru elementu>n pierwszy wstawiony element zostanie usunięty, a najnowszy zostanie umieszczony na mapie.

Czy jest coś podobnego w Javie, czy muszę go zaimplementować?

Odpowiedz

22

Można to zrobić z LinkedHashMap następująco:

new LinkedHashMap<K, V>(n) { 
    @Override protected boolean removeEldestEntry(Entry<K, V> entry) { 
    return size() > n; 
    } 
}; 
+0

To jest dobra krótka droga do usunięcia najstarszego wpisu bez podklasy klasy LinkedHashMap. –

+6

@TheOriginalAndroid, hę? Całkowicie podporządkowujesz LinkedHashMap. –

+0

jest bezpieczny dla wątków? – fuyou001

1

Ponieważ jestem po stronie, gdzie jest jego gadatliwość Java najlepiej cecha ... Poniżej działa dla mnie:

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()); 
     } 
    } 

} 

Działa również na Google App Engine, który wydaje się mieć problem z klasą Entry.

+0

Ta odpowiedź zrobiła to za mnie. big-up @yurin – qualebs