什么是迭代arraylist的最佳方式

时间:2016-01-28 12:31:59

标签: 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("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);
    });
}

我的问题是通过任何这些方式迭代是相同的还是有任何区别?如果他们,那么这是最好的方法,我的要求是根据某些条件从arraylist中删除一个元素。

2 个答案:

答案 0 :(得分:1)

  

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

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

增强的for循环和forEach不允许你删除元素,因为你没有当前元素的索引,即使你做了,删除增强for循环中的元素将抛出ConcurrentModificationException。

常规for循环和while循环也允许你删除元素,因为你有当前元素的索引,但你应该记得在删除元素后减少索引,因为从{{1删除元素将所有元素后面的元素移到左边。

答案 1 :(得分:0)

此外,您可以使用ArrayList CopyOnWriteArrayList

的此扩展名

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html

它的线程安全,你可以做到.remove没有任何问题,与普通的ArrayList相比,性能成本。