我实现了一个独特的地图。这是一个双向散列表,其中不仅键是唯一的,而且值也是。如何为Map实现创建自定义迭代器?
public interface UniqueMap<K,V>{
V uniquePut(K key, V value);
UniqueMap<V,K> inverse();
}
这是一个可能的实现:
public class SimpleUniqueMap<K,V> implements UniqueMap<K,V>, Iterable<K>{
public HashMap<K,V> uniqueMap = new HashMap<K,V>();
class EnumSimpleUniqueMap implements Iterator<K>{
int count = uniqueMap.size();
public boolean hasNext(){
return count > 0;
}
public K next(){
if(count == 0){
throw new NoSuchElementException();
}else{
count--;
//...
}
}
public void remove(){
throw new UnsupportedOperationException();
}
}
public Iterator<V> iterator(){
return new EnumSimpleUniqueMap();
}
public V uniquePut(K key, V value){
return null;
}
public UniqueMap<V,K> inverse(){
return null;
}
}
正如你可以看到我已经尝试实现我的唯一地图迭代器。但是从一个hashmap值不是由位置访问,而是由key来访问。所以通常我会拿柜台并获取价值,但在这种情况下,这不是可能的。
实际上,迭代键并逐个检索它们就足够了。我怎样才能做到这一点?有没有办法检索某种包含键和值的入口对象?
我知道我可以从地图对象中检索迭代器,但这不是我的选择。