使用迭代器从列表中删除条目

问题描述

代码无法编译。什么this.tokens

无论如何,如果要在迭代时删除元素,则必须使用迭代器的remove方法进行操作:

  1. itr.next();
  2. itr.remove();

不过,您的removeAllElements方法可以做到this.elements.clear()。更直接,更有效。

解决方法

我需要编写一个简单的函数,该函数将删除List包含类对象的所有条目Elem。我编写了函数removeAllElements,但是如果的大小List<Elem>大于1
,则该函数将不起作用。

  1. public class Test {
  2. public static void main(String[] args) {
  3. Work w = new Work();
  4. w.addElement(new Elem("a",new Integer[]{1,2,3}));
  5. w.addElement(new Elem("b",new Integer[]{4,5,6}));
  6. w.removeAllElements(); // It does not work for me.
  7. }
  8. }
  9. public class Work {
  10. private List<Elem> elements = new ArrayList<Elem>();
  11. public void addElement(Elem e) {
  12. this.elements.add(e);
  13. }
  14. public void removeAllElements() {
  15. Iterator itr = this.elements.iterator();
  16. while(itr.hasNext()) {
  17. Object e = itr.next();
  18. this.elements.remove(e);
  19. }
  20. }
  21. }
  22. public class Elem {
  23. private String title;
  24. private Integer[] values;
  25. public Elem(String t,Integer v) {
  26. this.title = t;
  27. this.values = v;
  28. }
  29. }

编辑#1 错误消息如下:

  1. Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
  2. at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
  3. at java.util.AbstractList$Itr.next(Unknown Source)

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”