Java LinkedList中ListIterator无法添加元素,列表无输出问题排查
以下是几种最可能导致空输出的原因及对应解决办法:
类成员Iterator误用:你把
Iterator<String> iterator定义为类的成员变量,一旦在addInOrder里用它遍历过列表,迭代器就会走到列表末尾。之后showBreadList再用同一个迭代器时,hasNext()会直接返回false,自然输出空。解决办法是不要将Iterator作为类成员,每次需要遍历的时候临时创建新的迭代器,比如在addInOrder里写Iterator<String> it = breadList.iterator();,showBreadList里也同理临时生成迭代器或者用增强for循环遍历。addInOrder未执行实际插入操作:检查
addInOrder的逻辑,是不是只做了遍历判断插入位置,却漏掉了调用breadList.add()方法把元素插进去?比如找到合适的索引后,必须执行breadList.add(index, breadName)这类操作,否则元素根本没被加入列表。breadList未初始化:确认类中的
breadList变量是否完成了实例化,比如有没有写private LinkedList<String> breadList = new LinkedList<>();。如果只是声明了变量但没创建LinkedList实例,调用addInOrder时要么抛出空指针异常,要么元素根本无法被添加,最终列表为空。showBreadList遍历逻辑错误:如果
showBreadList里用的是那个已经走到末尾的类成员iterator,自然读不到元素。正确的实现应该直接遍历原列表,比如用增强for循环:public void showBreadList() { for (String bread : breadList) { System.out.println(bread); } }或者临时创建新的迭代器来遍历。
内容的提问来源于stack exchange,提问作者0892133

