正确迭代Java中的数组列表

时间:2017-05-11 09:48:42

标签: java arraylist

在没有抛出异常的情况下迭代数组列表的正确方法是什么?我试过这个:

        while(packages.get(i)!=null)
        {
            if(packages.get(i).equals(z))
            {
                packages.remove(i);
                this.setNumPack(this.getNumPack()-1);
            }
            i++;
        }

当索引大于数组列表的大小时抛出异常。只要迭代器小于数组的大小,我也尝试迭代,但它没有帮助。感谢

7 个答案:

答案 0 :(得分:1)

有许多方法可以迭代和删除,但在您的特定代码中,如果删除元素,解决方案不会增加索引(因为删除元素会减少删除元素之后的所有元素的索引):

    while(packages.get(i)!=null)
    {
        if(packages.get(i).equals(z))
        {
            packages.remove(i);
            this.setNumPack(this.getNumPack()-1);
        } else {
            i++;
        }
    }

packages.get(i)到达i时,packages.size()当然会抛出异常,因此for循环会更好:

    for (int i = 0; i < packages.size(); i++)
    {
        if(packages.get(i).equals(z))
        {
            packages.remove(i);
            this.setNumPack(this.getNumPack()-1);
            i--;
        }
    }

答案 1 :(得分:0)

       for (int i = 0; i < packages.size(); i++) {
            if(packages.get(i).equals(z)) {
                packages.remove(i);
                this.setNumPack(this.getNumPack()-1);
            }
        }

答案 2 :(得分:0)

通常的方式:

for (int i = 0; i < list.size(); i++)

&#39;新&#39;方式:

for ('your type' item : list)

答案 3 :(得分:0)

您可以检查列表是否为空或列表是否为空元素...这些是2 compl。不同的事情

可以实现迭代器,但是您需要显式检查空值...

    List<Integer> l = Arrays.asList(1, null, 3, 4, 5, null);

    Iterator<Integer> it = l.iterator();

    while (it.hasNext()) {
        Integer integer = (Integer) it.next();
        if (integer != null) {
            System.out.println("the element is holding: " + integer);
        } else {
            System.out.println("the element is null");
        }
    }

或经典的 增强型循环

    List<Integer> l = Arrays.asList(1, 2, 3, 4, 5, null);
    if (l != null) {
        for (Integer integer : l) {
            if (integer != null) {
                System.out.println("the element is holding: " + integer);

            } else {
                System.out.println("the element is null");
            }
        }
    } else {
        System.out.println("the list is null");
    }

答案 4 :(得分:0)

您可以使用其中任何一个

//Loop Arraylist using foreach loop of JDK1.5
                System.out.println("ArrayList Loop Example using foreach loop of JDK 1.5");
        for(String element: loopList){
            System.out.println(element);
        }




 //Loop Arraylist using simple for loop and size method
            System.out.println("ArrayList Loop Example using for loop and size()");
    for(int i=0; i<loopList.size(); i++){
        System.out.println(loopList.get(i));
    }



//Iterate Arraylist using iterator and while loop in Java
           System.out.println("ArrayList Loop Example using Iterator and while loop");
    Iterator<String> iterator = loopList.iterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
    }





 //Iterate Arraylist using ListIterator and while loop in Java
                System.out.println("ArrayList Loop Example using ListIterator and while loop");
        ListIterator<String> listIterator = loopList.listIterator();
        while(listIterator.hasNext()){
            System.out.println(listIterator.next());
        }

答案 5 :(得分:0)

您也可以使用Java 8流API

List<Integer> list = Arrays.asList(1, 3, 4, 5);
list.stream().forEach(System.out::println);

答案 6 :(得分:0)

如果你计划在途中删除元素,你迟早会在一个arraylist中从头到尾迭代遇到问题。诀窍是从尾部到头部进行迭代,因为列表中完成的所有重新排序都是从已删除的索引到列表末尾完成的,而不是在删除索引之前的索引上。

伪码:

for(int i = list.size()-1; i >=0; i--){
    list.remove(i);
}