Java 迭代arraylist的最佳方法是什么

Java 迭代arraylist的最佳方法是什么,java,iterator,Java,Iterator,我有五种迭代ArrayList的方法,它们是 public static void main(String[] argv) { // create list List<String> aList = new ArrayList<String>(); // add 4 different values to list aList.add("eBay"); aList.add("Paypal"); aList.add("Go

我有五种迭代ArrayList的方法,它们是

public static void main(String[] argv) {

    // create list
    List<String> aList = new ArrayList<String>();

    // add 4 different values to list
    aList.add("eBay");
    aList.add("Paypal");
    aList.add("Google");
    aList.add("Yahoo");

    // iterate via "for loop"
    System.out.println("==> For Loop Example.");
    for (int i = 0; i < aList.size(); i++) {
        System.out.println(aList.get(i));
    }

    // iterate via "New way to loop"
    System.out.println("\n==> Advance For Loop Example..");
    for (String temp : aList) {
        System.out.println(temp);
    }

    // iterate via "iterator loop"
    System.out.println("\n==> Iterator Example...");
    Iterator<String> aIterator = aList.iterator();
    while (aIterator.hasNext()) {
        System.out.println(aIterator.next());
    }

    // iterate via "while loop"
    System.out.println("\n==> While Loop Example....");
    int i = 0;
    while (i < aList.size()) {
        System.out.println(aList.get(i));
        i++;
    }

    // collection stream() util: Returns a sequential Stream with this collection as its source
    System.out.println("\n==> collection stream() util....");
    aList.forEach((temp) -> {
        System.out.println(temp);
    });
}
publicstaticvoidmain(字符串[]argv){
//创建列表
列表列表=新的ArrayList();
//向列表中添加4个不同的值
添加(“易趣”);
添加(“贝宝”);
添加(“谷歌”);
添加(“雅虎”);
//通过“for循环”进行迭代
System.out.println(“==>表示循环示例”);
对于(int i=0;iadvanceforloop-Example..”;
用于(字符串临时值:aList){
系统输出打印项次(温度);
}
//通过“迭代器循环”进行迭代
System.out.println(“\n==>迭代器示例…”);
迭代器aIterator=aList.Iterator();
while(aIterator.hasNext()){
System.out.println(aIterator.next());
}
//通过“while循环”进行迭代
System.out.println(“\n==>While循环示例…”);
int i=0;
而(icollection stream()util…”);
列表forEach((临时)->{
系统输出打印项次(温度);
});
}
我的问题是,这些方法中的任何一种都是相同的,还是有任何区别?如果是这样,那么哪种方法是最好的,我的要求是根据某种条件从arraylist中删除一个元素

我的要求是根据某些条件从arraylist中删除元素

如果在迭代时必须从
ArrayList
中删除元素,则基本方法是使用显式迭代器(您的第三个选项)。使用
aIterator.remove()
删除当前元素

增强的for循环和
forEach
不允许删除元素,因为您没有当前元素的索引,即使有索引,删除增强的for循环中的元素也会引发ConcurrentModificationException


常规for循环和while循环也允许您删除元素,因为您有当前元素的索引,但您应该记住在删除元素后减小索引,因为从
ArrayList
中删除元素会将该元素之后的所有元素向左移动。

,您可以使用ArrayList的此扩展名
CopyOnWriteArrayList


它是线程安全的,您可以这样做。删除时不会出现任何问题,但与普通ArrayList相比会降低性能。

如果要删除元素,应使用迭代器。否则,您将得到一个常规for循环的例外,我发现从最后一个元素开始并迭代到第一个元素很容易。这样,您就不需要索引的附加逻辑。