我有一个类ListMap<K, V>
,它有一个实现类ListMapEntry
的嵌套类Entry<K, V>
。在ListMap
中,我创建了一个LinkedList<Entry<K, V>
形式的列表来模仿地图。我创建了size()
,isEmpty()
,find(K k)
,get(K k)
,put(K k, V v)
和remove(K k)
函数。
我现在正在尝试编写一个toString()
函数,该函数遍历地图并以以下形式打印:N : ('key1', 'value1') ('key2','value2') ... ('keyN', 'valueN')
为此,我获得了以下功能:
@Override
public Iterator<K> keys() {
return new Iterator<K>() {
Iterator<Entry<K,V>> iterator = list.iterator();
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public K next() {
return iterator.next().key();
}
};
}
@Override
public Iterator<V> values() {
return new Iterator<V>() {
Iterator<Entry<K,V>> iterator = list.iterator();
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public V next() {
return iterator.next().value();
}
};
}
@Override
public Iterator<Entry<K, V>> entries() {
return list.iterator();
}
这是我的toString()
方法:
public String toString() {
String output = this.size() + ": ";
Iterator<Entry<K, V>> iterator = this.entries();
while (iterator.hasNext()) {
output += "(" + iterator.next().key() + ", " + iterator.next().value() + ") ";
}
return output;
}
它只返回大小和分号,后面没有别的。我在使用迭代器函数将地图的每个元素添加到output
字符串时出错了吗?
修改
Here是整个ListMap
类。
我已将toString()
方法更改为以下内容,这会产生相同的结果:
public String toString() {
String output = this.size() + ": ";
Iterator<Entry<K, V>> iterator = this.entries();
if (iterator == null) {
return output;
}
else {
while (iterator.hasNext()) {
Entry<K, V> entry = iterator.next();
output += "(" + entry.value().toString() + ", " + entry.key().toString() + ") ";
}
}
return output;
}