Я реализовал уникальную карту.Это хэш-карта, которая является двунаправленной, где не только ключи уникальны, но и значения.
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 можно получить доступ не по позиции, а по ключу.Поэтому обычно я беру счетчик и получаю доступ к значениям, но в этом случае это невозможно.
На самом деле, этого будет достаточно, чтобы перебрать ключи и получить их один за другим.Как я могу это сделать?Есть ли способ получить какой-либо объект ввода, содержащий и ключ, и значение?
Я знаю, что могу извлечь итератор из объекта карты, но это не вариант для меня.