1

是否可以在每次迭代中访问存储在 ArrayDeque 中的元素?由于 ArrayDeque 没有 get 方法,我很难访问每个元素。在下面的示例中,我有一个整数 arraydeque,我正在尝试使用迭代器检索元素,并且我想检查该值是否为 2。如果是这样,我想将其从 ArrayDeque 中删除,但它给了我错误。

import java.lang.*;
import java.util.*;

public class ArrayDequeTest {

public static void main(String[] args) 
{   
    ArrayDeque<Integer> a = new ArrayDeque<Integer>();
    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);
    a.add(2);
    System.out.println("Elements added !!");

    Iterator i = a.iterator();
    System.out.println("\nRemoving the element whose value is 2");
    while(i.hasNext())
    {
        if(i==2) // please suggest as to how i can compare
        {
            i.remove();
        }
    }
}
4

2 回答 2

2

您错过了next()推进迭代器并检索当前值的调用:

Iterator<Integer> i = a.iterator();
while (i.hasNext())
{
    if (i.next() == 2) // Here!
    {
        i.remove();
    }
}

注意,顺便说一句,这ArrayDeque是 a Collection,所以你可以使用更优雅的removeIf

a.removeIf(v -> v == 2);
于 2018-06-28T19:15:35.093 回答
1

如果您使用的是 Java 8,则可以使用 lambda 表达式,并且只需一行即可完成此删除操作。

 a.removeIf(e -> e == 2);
于 2018-06-28T19:47:40.457 回答