Ways to iterate over a list in Java

后端 未结 12 1753
孤独总比滥情好
孤独总比滥情好 2020-11-22 00:46

Being somewhat new to the Java language I\'m trying to familiarize myself with all the ways (or at least the non-pathological ones) that one might iterate through a list (or

相关标签:
12条回答
  • 2020-11-22 00:56

    A JDK8-style iteration:

    public class IterationDemo {
    
        public static void main(String[] args) {
            List<Integer> list = Arrays.asList(1, 2, 3);
            list.stream().forEach(elem -> System.out.println("element " + elem));
        }
    }
    
    0 讨论(0)
  • 2020-11-22 00:57

    For a backward search you should use the following:

    for (ListIterator<SomeClass> iterator = list.listIterator(list.size()); iterator.hasPrevious();) {
        SomeClass item = iterator.previous();
        ...
        item.remove(); // For instance.
    }
    

    If you want to know a position, use iterator.previousIndex(). It also helps to write an inner loop that compares two positions in the list (iterators are not equal).

    0 讨论(0)
  • 2020-11-22 01:00

    Above you'll find all differents ways to iterate over a LIST.

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    import java.util.ListIterator;
    
    public class test1 {
    
    public static void main(String[] args) {
        //******* Exercise 1 : Write a Java program to create a new array list, add some colors (string) and print out the collection.
        List<String> colors = new ArrayList<String>();
        colors.add("Black");
        colors.add("Red");
        colors.add("Green");
        colors.add("Blue");
        System.out.println(colors);
        
        
        //******* Exercise 2 : Write a Java program to iterate through all elements in a array list. 
        System.out.println("//******* Exercise 2");
        List<Integer> list2 = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
        
        // iteration type 1 : using FOR loop
        System.out.println("// iteration type 1");
        for(Integer nb : list2) {
            System.out.print(nb + ", ");
        }
        System.out.println("\n");
        
        // iteration type 2 : using FOR loop
        System.out.println("// iteration type 2");
        for(int i=0; i < list2.size(); i++) {
            System.out.print(list2.get(i) + ", ");
        }System.out.println("\n");
        
        // iteration type 3  : using Do-While loop
        System.out.println("// iteration type 3");
        int index21 = 0;
        
        do {
            System.out.print(list2.get(index21) + ", ");
            index21++;
        }while(index21<list2.size());
        System.out.println("\n");
        
        
        // iteration type 4  : using While loop
        System.out.println("// iteration type 4");
        int index22 = 0;
        while(index22<list2.size()) {
            System.out.print(list2.get(index22) + ", ");
            index22++;
        }
    
        System.out.println("\n");
        
        
        // iteration type 5  : using  Iterable forEach loop 
        System.out.println("// iteration type 5");
         list2.forEach(elt -> {
             System.out.print(elt + ", ");
         });
    
        System.out.println("\n");
        
        
        // iteration type 6  : using  Iterator
        System.out.println("// iteration type 6");
        Iterator<Integer> listIterator = list2.iterator();
        while(listIterator.hasNext()) {
            System.out.print( listIterator.next() + ", ");
        }
        
        System.out.println("\n");
        
        // iteration type 7  : using  Iterator (From the beginning)
        System.out.println("// iteration type 7");
        ListIterator<Integer> listIterator21 = list2.listIterator(list2.size());
        while(listIterator21.hasPrevious()) {
            System.out.print( listIterator21.previous() + ", ");
        }
    
        System.out.println("\n");   
        
        // iteration type 8  : using  Iterator (From the End)
        System.out.println("// iteration type 8");
        ListIterator<Integer> listIterator22 = list2.listIterator();
        while(listIterator22.hasNext()) {
            System.out.print( listIterator22.next() + ", ");
        }
    
        System.out.println("\n");   
    }
    
    }
    
    0 讨论(0)
  • 2020-11-22 01:04

    The basic loop is not recommended as you do not know the implementation of the list.

    If that was a LinkedList, each call to

    list.get(i)
    

    would be iterating over the list, resulting in N^2 time complexity.

    0 讨论(0)
  • 2020-11-22 01:04

    You can use forEach starting from Java 8:

     List<String> nameList   = new ArrayList<>(
                Arrays.asList("USA", "USSR", "UK"));
    
     nameList.forEach((v) -> System.out.println(v));
    
    0 讨论(0)
  • 2020-11-22 01:06

    The three forms of looping are nearly identical. The enhanced for loop:

    for (E element : list) {
        . . .
    }
    

    is, according to the Java Language Specification, identical in effect to the explicit use of an iterator with a traditional for loop. In the third case, you can only modify the list contents by removing the current element and, then, only if you do it through the remove method of the iterator itself. With index-based iteration, you are free to modify the list in any way. However, adding or removing elements that come before the current index risks having your loop skipping elements or processing the same element multiple times; you need to adjust the loop index properly when you make such changes.

    In all cases, element is a reference to the actual list element. None of the iteration methods makes a copy of anything in the list. Changes to the internal state of element will always be seen in the internal state of the corresponding element on the list.

    Essentially, there are only two ways to iterate over a list: by using an index or by using an iterator. The enhanced for loop is just a syntactic shortcut introduced in Java 5 to avoid the tedium of explicitly defining an iterator. For both styles, you can come up with essentially trivial variations using for, while or do while blocks, but they all boil down to the same thing (or, rather, two things).

    EDIT: As @iX3 points out in a comment, you can use a ListIterator to set the current element of a list as you are iterating. You would need to use List#listIterator() instead of List#iterator() to initialize the loop variable (which, obviously, would have to be declared a ListIterator rather than an Iterator).

    0 讨论(0)
提交回复
热议问题