我的LinkedList实现Map中的迭代器函数不起作用

时间:2016-02-25 15:27:41

标签: java dictionary linked-list iterator listiterator

我有一个类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;
}

0 个答案:

没有答案