2013-06-07 10 views
7

मैं एक HashMap की जरूरत है या तत्वों की एक निश्चित संख्या (n) एक फीफो कतार की तरह काम के साथ एक Map simpy।फीफो मानचित्र

तो जब तक तत्व संख्या < = n नए तत्व बस मानचित्र में डाल रहे हैं।

तत्व संख्या के लिए>एन पहला सम्मिलित तत्व हटा दिया गया है और नवीनतम मानचित्र में रखा गया है।

क्या जावा में कुछ समान है, या क्या मुझे इसे लागू करना है?

उत्तर

22

आप इस प्रकार LinkedHashMap के साथ ऐसा कर सकते हैं:

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

क्लास, लिंक्ड हैशैप के उप-वर्गीकरण के बिना सबसे पुरानी प्रविष्टि को हटाने का यह एक अच्छा तरीका है। –

+6

@TheOriginalAndroid, हुह? आप पूरी तरह से LinkedHashMap subclassing कर रहे हैं। –

+0

यह धागा सुरक्षित है? – fuyou001

1

मैं उस ओर है जहां जावा शब्दाडंबर अपने सबसे अच्छा सुविधा है पर हूँ के रूप में ... नीचे मेरे लिए काम करता है:

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 पर भी काम करता है जो ऐसा लगता है कि एंट्री क्लास में समस्या है।

+0

यह उत्तर मेरे लिए किया था। बड़े अप @yurin – qualebs

संबंधित मुद्दे