创建可迭代的列表

时间:2013-11-08 16:21:14

标签: java

我正在尝试创建一个可迭代的列表,我陷入了迭代器部分

这是我的代码

import java.util.Iterator;

public class MappableList<T> implements Iterable<T> {

T list[];

public MappableList(T arg1, T arg2, T arg3, T arg4) {
    list = (T[]) new Object[4];

    list[0] = arg1;
    list[1] = arg2;
    list[2] = arg3;
    list[3] = arg4;

}

void printList() {
    for (int i = 0; i < 4; i++) {
        System.out.println(list[i]);
    }

}

@Override
public Iterator<T> iterator() {
    Iterator<T> iter = new list.iterator();
    return iter;
}
}

它不适用于

部分
Iterator<T> iter = new list.iterator();

任何想法或想法?

由于

3 个答案:

答案 0 :(得分:2)

您需要实际重新实现Iterator接口;没有list.iterator()这样的东西。

答案 1 :(得分:0)

您已声明list是一个数组,因此它没有成员iterator()而且没有内部类。 iterator制作一个实例。

您可以根据hasNext()返回index < actIndex的位置实现iterator索引,next()返回list[itIndex],如果被调用则会引发NoSuchElementExceptionhasNext()返回false之后。

答案 2 :(得分:0)

假设您的数组总是完全填充元素,最小的Iterator实现可能如下所示:

@Override public Iterator<T> iterator()
{
    final T[] list = this.list;
    return new Iterator<T>()
    {
        int idx;
        public boolean hasNext() { return idx < list.length; }
        public T       next()    { return list[ idx++ ]; }
        public void    remove()  { throw new UnsupportedOperationException(); }
    };
}

顺便说一下,您应该考虑将list成员声明为私有。直接从具有关于类型T的较窄定义(即特殊子类)的知识的地方访问它可能会在运行时导致ClassCastExceptions,即使代码编译得很好而只是警告您在构造函数中获得的(T[])强制转换。