首页 > 解决方案 > 尝试遍历 ArrayList 时,自定义迭代器不会打印任何内容

问题描述

我对迭代器很陌生,但是对于一项任务,我编写了一个自定义迭代器,我想在迭代它们的列表时简单地打印出对象,但它什么也没打印,我不知道为什么。

这是自定义迭代器代码:

import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

public class MyList<T> implements Iterable<T> {
    private List<T> list;

    private class MyIterator<t> implements Iterator<t> {
        int lSize = list.size();
        int lPoint = 0;

        public boolean hasNext() {          
            return (lPoint < lSize);
        }

        public t next() {                   
            if (!hasNext()) {
                throw new NoSuchElementException();
            }

            t val = (t) list.get(lPoint);
            lPoint++;

            return val;
        }

    }

    public MyList(List<T> list) {
        this.list = list;
    }

    public Iterator<T> iterator() {
        return new MyIterator<>();
    }

}

这是我用来测试它的类:

Public class TestCloning {

    Electronics test = new Electronics("Test", 100, 10);
    Electronics test3 = new Electronics("Test2", 300, 30);
    List<Electronics> order1 = new ArrayList<>();
    MyList<Electronics> mList1 = new MyList<>(order1);
    Iterator<Electronics> mIterator1 = mList1.iterator();

    public void testIterator(){
        order1.add(test);
        order1.add(test3);
        while (mIterator1.hasNext()){
            System.out.println(mIterator1.next().toString());
        }
    }
}

标签: javaiterator

解决方案


这主要是因为lSize=0 它为零的原因是因为您myList在实际将任何项目添加到该列表之前添加了事物列表。

List<String> order1 = new ArrayList<>();
order1.add(test);
order1.add(test3);
MyList<String> mList1 = new MyList<>(order1);
Iterator<String> mIterator1 = mList1.iterator();

如果您翻转订单,将东西添加到订单列表中,然后创建您的自定义订单,一切都会按您的预期工作。

另外,我建议将来不要使用任何自定义迭代器或包含普通列表的列表。我了解这是出于分配的目的,然后可以接受


推荐阅读