2013-03-19 88 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的迭代器移动地图的第一个元素保留在了对的顺序您输入的顺序相同。请注意,如果您从地图中获取对象,则需要删除并再次添加它以保持链接的地图对的顺序