Java如何使用for-each迭代通用集合?

在此示例中,您将学习如何使用for-each循环来迭代通用集合。for-eachJava实际上没有关键字或语句。它只是for循环的一种特殊语法。for-each循环的结构或语法如下。

for (type var : collections) {
    body;
}

这种形式的for循环总是读为foreach,冒号(:)字符读为“ in”。根据该定义,如果类型为String,则您将阅读上面的语法为“集合中的foreach String var”。上面的语句中的var将在迭代过程中被赋予集合中的每个值。

让我们比较两个代码,第一个使用通用代码,另一个不使用通用代码,以便在使用集合时从迭代的角度看到差异。

package org.nhooo.example.generics;

import java.util.ArrayList;
import java.util.List;

public class ForEachGeneric {

    public void loopWithoutGeneric() {
        List customers = new ArrayList();
        customers.add(new Customer());
        customers.add(new Customer());
        customers.add(new Customer());

        for (int i = 0; i < customers.size(); i++) {
            Customer customer = (Customer) customers.get(i);
            System.out.println(customer.getFirstName());
        }
    }

    public void loopWithGeneric() {
        List<Customer> customers = new ArrayList<>();
        customers.add(new Customer());
        customers.add(new Customer());
        customers.add(new Customer());

        for (Customer customer : customers) {
            System.out.println(customer.getFirstName());
        }        
    }
}

从上面的代码片段中可以看到,当我们使用集合的通用版本时,我们的代码要干净得多。在第一种方法中,loopWithoutGeneric我们必须手动将对象强制转换回Customer类型。但是在第二种方法中,该loopWithGeneric方法不需要强制转换,因为集合将返回与声明要保留的集合相同的类型。