for each 특징

 

1. 배열의 값을 가져다만 사용할 수 있고 수정할 수 없다. Only read

2. 내부적인 Iterator을 생성해서 사용

3. for문과 구현 방식에 대한 성능 차이는 없다.(List 제외)

4. 인덱스를 사용할 수 없다.

 

 

평범한 for문 구조

String[] numbers = {"one", "two", "three"};
for(int i=0; i<numbers.length; i++) { //평범한 for문 출처 "점프 투 자바"
    System.out.println(numbers[i]);
}

 

for each문 구조 

String[] numbers = {"one", "two", "three"};
for(String number: numbers) { //for each 문 
    System.out.println(number);
}

 

for (type var: iterate) {
    body-of-loop
}

 

 

ArrayList vs LinkedList 시간복잡도 차이

import java.util.ArrayList;
import java.util.LinkedList;

public class ListTest {

    public static void main(String[] args) {

        long beforeTime, afterTime;
        ArrayList<Integer> Alist = new ArrayList<Integer>();
        LinkedList<Integer> Llist = new LinkedList<Integer>();

        for(int i = 0; i < 100000; i++){
            Alist.add(i);
            Llist.add(i);
        }


        beforeTime = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++){
            Alist.get(i);
        }
        afterTime = System.currentTimeMillis();
        System.out.println("ArrayList 수행시간 : " + (afterTime - beforeTime));


        beforeTime = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++){
            Llist.get(i);
        }
        afterTime = System.currentTimeMillis();
        System.out.println("LinkedList 수행시간 : " + (afterTime - beforeTime));
    }
}

 

ArrayList 수행시간 : 1
LinkedList 수행시간 : 3769

 

 

 

 

LinkedList에서 for문을 사용하면 안되는 이유

-  배열은 index크기만큼 더해서 값에 접근함 (0번의 주솟값 + 배열 한 칸의 byte 크기 = 찾으려는 공간)

- 연결리스트는 고정된 변화값으로 주소값이 연속되지 않음 주소가 불연속적 : 따라서 시간 복잡도 O(n^2)

 

 

LinkedList에서 for each 사용 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

public class ListTest {


    public static void main(String[] args) {

        long beforeTime, afterTime;
        ArrayList<Integer> Alist = new ArrayList<Integer>();
        LinkedList<Integer> Llist = new LinkedList<Integer>();

        for(int i = 0; i < 100000; i++){
            Alist.add(i);
            Llist.add(i);
        }


        beforeTime = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++){
            Alist.get(i);
        }
        afterTime = System.currentTimeMillis();
        System.out.println("ArrayList for 수행시간 : " + (afterTime - beforeTime));


        beforeTime = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++){
            Llist.get(i);
        }
        afterTime = System.currentTimeMillis();
        System.out.println("LinkedList for 수행시간 : " + (afterTime - beforeTime));


        beforeTime = System.currentTimeMillis();
        for(int i : Llist){
            //int sum += i; TODO
        }
        afterTime = System.currentTimeMillis();
        System.out.println("LinkedList for-each 수행시간 : " + (afterTime - beforeTime));


    }

}

 

ArrayList for 수행시간 : 1
LinkedList for 수행시간 : 3564
LinkedList for-each 수행시간 : 4

 

 

Iterator ?

자바 컬렉션에 저장되어 있는 요소들을 순화하는 인터페이스

요소에 대해 내부적으로 객체를 생성한 후 순차적으로 조회한다.

사용법이 쉽지만 객체를 생성하는 부분에서 시간이 걸린다.

 

Collection ?

자바에서 제공하는 자료구조들의 인터페이스, List, ArrayList, Stack, Queue, LinkedList 등이 있다.

따라서 이러한 컬렉션 인터페이스를 상속받는 클래스들에 대해 Iterator 인터페이스 사용이 가능하다.

 

 

Collection 구조 / 위키백과

 

List Iterator ?

 Iterator 인터페이스에서 List에 맞게 기능이 추가된 인터페이스이다. 추가, 요소 대체, 역방향 접근, 앞/뒤 인덱스 확인 등

 

 사용 상황 : List요소의 수정이 필요한 경우에 사용한다.

 

 

 

for, for each, Iterator, forEach(),,,  더 알아보기

 

 

 

list . foreach? (Stream API)

for each vs 이터레이터

 

참조 : https://www.geeksforgeeks.org/how-to-iterate-linkedlist-in-java/

 

How to Iterate LinkedList in Java? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://you88.tistory.com/39

 

[Java] 자바 List 탐색/순회 (for문, 향상된for문, ListIterator)

자바는 List 인터페이스를 구현한 ArrayList, LinkedList, Vector, Stack 클래스 등을 제공한다. 따라서 List의 탐색, 순회 방법을 이용하여 이러한 클래스들의 탐색, 순회가 가능하다. 자바의 버전이 올라가

you88.tistory.com