带有LinkedList的foreach循环的行为如何



我不确定在foreach循环中LinkedList的行为。例如:

LinkedList<Apple> apples = new LinkedList<Apple>();
public Apple apple(String colour) {
    for (Apple apple : apples) {
        if (apple.getColour().equals(colour)) {
            dosomething();
            return apple;
        }
    }
    return null;
}

想象一下,清单上有很多红苹果,没有任何特定的顺序。当它被这样调用时:

apple("Red");

它会退回第一个红苹果还是最后一个?如果没有,它究竟会如何表现?

增强的for循环的行为就像迭代器从列表的开头一直到结尾。它将作用于符合您条件的第一个元素。

对于任何属于Iterable亚型的事物都是如此;即任何能够产生Iterator的东西。因此,涵盖了Collection类。

图示:你的增强版是在封面下做的:

for(Iterator<Apple> iterator = apples.iterator(); iterator.hasNext();) {
    Apple apple = iterator.next();
    if(apple.getColour().equals(colour)) {
        dosomething();
        return apple;
    }
 }

LinkedList<E>是一个具有定义顺序的容器:它的迭代顺序与项目添加到列表中的顺序相对应。由于for循环在找到所需颜色的苹果后立即终止,因此将返回第一个红色苹果。当然,如果列表中不包含红苹果,则会返回null

其他类型的列表(例如数组列表)也是如此。但是,其他容器的行为可能有所不同。例如,TreeSet<E>将以可能不同于插入顺序的方式对其元素进行排序;HashSet<E>将以任意顺序返回其元素,依此类推。

for each循环使用Iterable接口的迭代器方法来获取要迭代的集合的迭代程序。如果您查看LinkedList的Javadoc,您会发现它的迭代器()方法是从AbstractSequenceList类继承的:http://docs.oracle.com/javase/6/docs/api/java/util/AbstractSequentialList.html#iterator()

其文件说明:

返回此列表中元素的迭代器(正确序列)。

是的,你会得到第一个红苹果。

相关内容

  • 没有找到相关文章

最新更新