我實現了一個獨特的地圖。這是一個雙向散列表,其中不僅鍵是唯一的,而且值也是。如何爲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來訪問。所以通常我會拿櫃檯並獲取價值,但在這種情況下,這不是可能的。
實際上,迭代鍵並逐個檢索它們就足夠了。我怎樣才能做到這一點?有沒有辦法檢索某種包含鍵和值的入口對象?
我知道我可以從地圖對象中檢索迭代器,但這不是我的選擇。