среда, 1 августа 2012 г.

collections: Iterable-Iterator


    Классический for для перебора элементов List (отлично для ArrayList, плохо для LinkedList)
import java.util.List;
import static java.util.Arrays.asList;

public class ListExample_0_for {
    public static void main(String[] args) {
        List<String> list = asList("A", "B", "C");

        // for
        for (int k = 0; k < list.size(); k++) {
            System.out.print(" " + list.get(k));
        }
    }
}
>> A B C

    while для перебора элементов List (хорошо и для ArrayList, и для LinkedList)
import java.util.Iterator;
import java.util.List;
import static java.util.Arrays.asList;

public class ListExample_1_iter_while {
    public static void main(String[] args) {
        List<String> list = asList("A", "B", "C");

        // while over iterator
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()) {
            System.out.print(" " + iter.next());
        }
    }
}
>> A B C

    for по итератору для перебора элементов List (хорошо и для ArrayList, и для LinkedList)
import java.util.Iterator;
import java.util.List;
import static java.util.Arrays.asList;

public class ListExample_2_iter_for {
    public static void main(String[] args) {
        List<String> list = asList("A", "B", "C");

        // for over iterator
        for (Iterator<String> iter0 = list.iterator(); iter0.hasNext(); ) {
            System.out.print(" " + iter0.next());
        }
    }
}
>> A B C

    foreach для перебора элементов List (хорошо и для ArrayList, и для LinkedList), компилятор разворачивает его в for-по-итератору
import java.util.List;
import static java.util.Arrays.asList;

public class ListExample_3_foreach {
    public static void main(String[] args) {
        List<String> list = asList("A", "B", "C");

        // foreach
        for (String elem : list) {
            System.out.print(" " + elem);
        }
    }
}
>> A B C

    Аналогично для Set
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import static java.util.Arrays.asList;

public class SetExample_1_iter_while {
    public static void main(String[] args) {
        Set<String> set = new TreeSet<>(asList("A", "B", "C"));

        // while over iterator
        Iterator<String> iter = set.iterator();
        while (iter.hasNext()) {
            System.out.print(" " + iter.next());
        }
    }
}
>> A B C
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Set;
import static java.util.Arrays.asList;

public class SetExample_2_iter_for {
    public static void main(String[] args) {
        Set<String> set = new TreeSet<>(asList("A", "B", "C"));

        // for over iterator
        for (Iterator<String> iter = set.iterator(); iter.hasNext(); ) {
            System.out.print(" " + iter.next());
        }
    }
}
>> A B C
import java.util.Set;
import java.util.TreeSet;
import static java.util.Arrays.asList;

public class SetExample_3_foreach {
    public static void main(String[] args) {
        Set<String> set = new TreeSet<>(asList("A", "B", "C"));

        // foreach
        for (String elem : set) {
            System.out.print(" " + elem);
        }
    }
}
>> A B C


    А вот как это выглядит для Map
import java.util.*;

public class MapExample_0_foreach_long {

    public static void main(String[] args) {
        Map<String, Integer> map = new TreeMap<>();
        map.put("A", 10);
        map.put("B", 20);
        map.put("C", 30);

        Set<String> keys = map.keySet();
        Collection<Integer> values = map.values();
        Set<Map.Entry<String, Integer>> entries = map.entrySet();

        for (String key : keys) {
            System.out.print(" " + key);
        }
        System.out.println();
        for (Integer value : values) {
            System.out.print(" " + value);
        }
        System.out.println();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.print(" " + key + "->" + value);
        }
        System.out.println();
    }
}
>> A B C
>> 10 20 30
>> A->10 B->20 C->30

    Ну или записанное чуть короче
import java.util.*;

public class MapExample_1_foreach_short {
    public static void main(String[] args) {
        Map<String, Integer> map = new TreeMap<>();
        map.put("A", 10);
        map.put("B", 20);
        map.put("C", 30);

        for (String key : map.keySet()) {
            System.out.print(" " + key);
        }
        System.out.println();
        for (Integer value : map.values()) {
            System.out.print(" " + value);
        }
        System.out.println();
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.print(" " + entry.getKey() + "->" + entry.getValue());
        }
        System.out.println();
    }
}
>> A B C
>> 10 20 30
>> A->10 B->20 C->30