【问题标题】:what is the best way of iterate a arraylist [duplicate]迭代arraylist的最佳方法是什么[重复]
【发布时间】:2016-05-05 20:01:16
【问题描述】:

我有这五种方法来遍历 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);
    });
}

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

【问题讨论】:

  • 如果你想删除元素,你应该使用迭代器。否则会报异常

标签: java iterator


【解决方案1】:

另外,你可以使用ArrayList的这个扩展CopyOnWriteArrayList

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

它是线程安全的,您可以毫无问题地执行 .remove,但与普通 ArrayList 相比,会以性能为代价。

【讨论】:

    【解决方案2】:

    我的要求是根据某些条件从数组列表中删除一个元素

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

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

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

    【讨论】:

    • 对于您的常规 for 循环,我发现从最后一个元素开始并迭代到第一个元素很容易。这样你就不需要额外的索引逻辑。
    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多