java - 尝试遍历 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());
}
}
}
解决方案
这主要是因为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();
如果您翻转订单,将东西添加到订单列表中,然后创建您的自定义订单,一切都会按您的预期工作。
另外,我建议将来不要使用任何自定义迭代器或包含普通列表的列表。我了解这是出于分配的目的,然后可以接受
推荐阅读
- c - 链表仅偶尔提供 segv
- amazon-web-services - 在通过 SAM/CloudFormation 管理的 Lambda 函数中使用现有的 KMS 密钥
- angular - 获取 Angular 手表“没有这样的文件或目录,stat '/path/to/file/.#foo.ts'”
- flowchart - How to solve these problems dealing with flowcharts?
- html - 如何在保持 4:3 纵横比的任何分辨率下将 10 个图像放在全屏行中
- c++ - 是否可以使用 std::make_unique 对动态数组进行大括号初始化?
- ruby-on-rails - 使用 Twitter gem 使用 slugs 提取 Twitter 列表
- javascript - 赛普拉斯断言 - 元素可操作/未涵盖
- asp.net-web-api - asp.net web api 方法没有被执行
- swift - 如何在收藏视图中缩放和显示下一个/上一个项目?