gpt4 book ai didi

java - 如何从泛型类中的私有(private)ArrayList中删除元素

转载 作者:行者123 更新时间:2023-11-30 06:04:59 24 4
gpt4 key购买 nike

我有泛型类 MyArray,其中私有(private)成员是 ArrayList,内部是实现的迭代器。

在 Main 中给出了一些带有字符串的 MyArray,我想从中删除所有“测试”...问题在于迭代器中的删除方法不起作用

这是类的样子:

public class MyArray<E> {
private ArrayList<E> list;

public MyArray() {
list = new ArrayList<E>();
}

public int length() { return list.size(); }

public E at(int pos) { return list.get(pos); }

public void add(E val) { list.add(val); }

public void remove(int pos) { list.remove(pos); }

public class MyIterator implements Iterator<E>{
int index;

@Override
public boolean hasNext() {
return index < list.size();
}

@Override
public E next() {
if (!hasNext())
throw new NoSuchElementException("no next value");
E tmp = list.get(index);
index++;
return tmp;
}

}

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

public static void main(String[] args) {
MyArray<String> b = new MyArray<String>();
b.add("This");
b.add("is");
b.add("test");
b.add("please");
b.add("delete");
b.add("all");
b.add("test");

Iterator<String> iter = b.iterator();
while(iter.hasNext())
System.out.println(iter.next());

for(Iterator<String> i = b.iterator(); i.hasNext(); ) {
String tmp = i.next();
if (tmp.equals("test"))
i.remove();
}

Iterator<String> ite = b.iterator();
while(ite.hasNext())
System.out.println(ite.next());
}

}

我得到的异常(exception)是:

Exception in thread "main" java.lang.UnsupportedOperationException: remove
at java.util.Iterator.remove(Unknown Source)
at cas1.MyArray.main(MyArray.java:71)

最佳答案

您需要在 Iterator 中重写 remove()

但是,最简单的方法是让您的 iterator() 方法返回 list.iterator(),而不是自己实现它:

    public Iterator<E> iterator() {
return list.iterator();
}

关于java - 如何从泛型类中的私有(private)ArrayList中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com