Java的foreach循环是否保留顺序?

2021/01/17 11:51 · java ·  · 0评论

Java的foreach循环是否从第一个对象开始,并且以线性方式工作到结束?例如

String[] names = new String[] {"Zoe", "Bob", "Charlie", "Alex"};
for(String name : names) {
  //do stuff...
}

是否总是先处理字符串“ Zoe”,然后处理“ Bob”等?没有排序发生?我已经对它进行了测试,但没有找到任何东西,但是我需要保证,在文档中找不到任何东西。

是。顺序不变。这适用于Java类集合框架的所有类型的集合,这些集合实现由for循环使用迭代器接口如果要对数组进行排序,则可以使用Arrays.sort(names)

for在JLS 14.14.2中指定了增强的循环,在该循环中编写了等效的代码。

它可用于遍历的数组和实例Iterable

  • 对于阵列,迭代顺序将始终保留且在两次运行之间保持一致。这是因为它等效于一个简单的for循环,其索引从数组的开头到结尾。

    增强的for语句等效于以下形式的基本for语句:

    T[] #a = Expression;
    L1: L2: ... Lm:
    for (int #i = 0; #i < #a.length; #i++) {
        {VariableModifier} TargetType Identifier = #a[#i];
        Statement
    }
    

    #a并且#i是自动生成的标识符,该标识符与在发生增强的for语句时作用域内的任何其他标识符(自动生成的标识符或其他标识符)不同。

  • 对于Iterable,它将遵循相应的顺序Iterator(通过调用检索Iterable.iterator()),两次运行之间可能一致,也可能不一致。

    增强的for语句等效于以下形式的基本for语句:

    for (I #i = Expression.iterator(); #i.hasNext(); ) {
    {VariableModifier} TargetType Identifier =
        (TargetType) #i.next();
        Statement
    }
    

    #i 是自动生成的标识符,与在for语句增强时发生的作用域(第6.3节)中的其他任何标识符(自动生成的标识符或其他标识符)不同。

    您应该参考每种类型的Javadoc来查看订单是否一致。例如,明确指定for List,迭代器保留顺序

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

    虽然明确指定for Set,但订单未指定(除非做出额外保证)

    元素以不特定的顺序返回(除非此集合是提供保证的某些类的实例)。

本文地址:http://java.askforanswer.com/javadeforeachxunhuanshifoubaoliushunxu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!