2013-03-19 36 views
4

我正在做我的功課。我需要一個<key, value>數據結構來存儲緩存。另外,當新元素沒有空間時(LinkedHashMap.removeEldestEntry()的模擬),我需要刪除最舊的項目。Map.Entry的執行隊列<K, V>

我想通過Map.Entry<K, V>實現一個排隊的分配。解決問題是否正確?

說明:

public class Queue<K, V> 
{ 
    protected LinkedList<MyEntry<K, V>> list; 

    public Queue() { 
     list = new LinkedList<MyEntry<K,V>>(); 
    } 
    //// 
} 

final class MyEntry<K, V> implements Map.Entry<K, V> { 
    private final K key; 
    private V value; 

    public MyEntry(K key, V value) { 
     this.key = key; 
     this.value = value; 
    } 

    @Override 
    public K getKey() { 
     return key; 
    } 

    @Override 
    public V getValue() { 
     return value; 
    } 

    @Override 
    public V setValue(V value) { 
     V old = this.value; 
     this.value = value; 
     return old; 
    } 
} 

然後:

Queue<String, String> queue = new Queue<String>(); 
+0

請更精確地解釋任務。什麼是實施隊列的目的?你的變量在哪裏存儲元素的限制?那緩存怎麼樣? – user905686 2013-03-19 11:56:09

+0

@ user905686,隊列的目的是簡單地刪除舊項目。在類Queue中存儲變量來存儲元素的限制。緩存是設置任務的抽象。 – Denis 2013-03-19 12:06:19

+1

我想你可以從閱讀http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html開始,看看這個http://4.bp.blogspot.com /-_EMDb5HG8zU/UIcuKYhNrZI/AAAAAAAABPA/-aJ4t-OX6NY/s1600/page-caching-linkedhashmap.png。那麼你可能知道如何自己編寫代碼。這真的需要一些時間,所以我只是跳過編碼。 – cwhsu 2013-03-19 12:13:22

回答

1

如果您使用的LinkedHashMap比在你自LinkedHashMap的迭代器移動地圖的第一個元素保留在了對的順序您輸入的順序相同。請注意,如果您從地圖中獲取對象,則需要刪除並再次添加它以保持鏈接的地圖對的順序