使用迭代器遍历ArrayList并使用instanceof设置对象

时间:2019-10-21 22:47:20

标签: java arraylist iterator

我有一个对象的ArrayList和一个遍历它们的迭代器。我正在尝试在列表中找到Ant对象的实例,并将其分配给ant变量。

while(iterator.hasNext()) {
    if(iterator.getNext() instanceof Ant) {
        Ant ant = (Ant)iterator.getNext();
    }
}

由于iterator.getNext()在调用时会递增迭代器,因此上述代码将ant之后的对象分配给ant变量。我想知道如何正确地将列表中的Ant对象分配给ant变量。

2 个答案:

答案 0 :(得分:1)

您两次调用.getNext(),因此实际上是在检查对象之后投射对象。

尝试一下:

while(iterator.hasNext()) {
  Object obj = iterator.next();
  if (obj instanceof Ant) {
    Ant ant = (Ant)obj;
  }
}

还应注意,在迭代器中检索基础对象是.next()而不是.getNext()

答案 1 :(得分:-1)

之所以发生这种情况,是因为您两次调用iterator.getNext():第一次在条件处,然后在条件体中,所以您错过了第一个值,然后尝试使用第二个Ant类型。您需要类似

的代码
while(iterator.hasNext()) {
            Object obj = null; 
            if((obj = iterator.getNext()) instanceof Ant) {
                Ant ant = (Ant)obj;
            }
}