ArrayList 자료구조를 예시로 들어 설명하면
ArrayList.get(인덱스) 메소드를 실행하면 내부적으로 해당 인덱스를 찾기 위해 루프가 돌게 된다고 한다.
그렇기 때문에 리스트의 원소에 접근할 때,
for each문을 사용하지 않고 for문을 사용하여 index를 이용해 get으로 접근하면
이중 루프를 사용한 것이 되어 O(n^2)의 시간이 걸리게 된다.
그러나 애초에 for each문을 사용하여 리스트의 원소에 접근하면 get() 메소드를 사용할 필요가 없으므로
루프를 한번만 사용한 것이 되어 O(n)의 시간이 걸린다.
// 리스트를 for문으로 접근할 경우
for (int i=0;i<ArrayList.size();i++) { // 외부 루프
int num = ArrayList.get(i) // get() 메소드 내부적으로 실행되는 내부 루프
} // -> 가시적으로는 for문 루프 1번이지만 실제 동작으로 생각하면 이중 루프이다.
// 리스트를 for each문으로 접근할 경우
for (int x : ArrayList) { // 루프 1번
int num = x;
} // get() 메소드를 사용하지 않고 리스트의 원소에 접근하기 때문에 for each문으로 인한 루프 1번만 사용된다.
'JAVA' 카테고리의 다른 글
Lombok Annotaion) @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor (0) | 2020.08.31 |
---|---|
Lombok이란 무엇인가? Lombok IntelliJ 환경에 설치하기 (0) | 2020.08.31 |
JAVA) GC(Garbage Collector) 동작 방식 (0) | 2020.07.28 |
JAVA) 변수들의 자료형에 따른 초기값 (0) | 2020.07.17 |
JAVA) Stack(스택) 클래스, Queue(큐) 인터페이스 (0) | 2020.07.14 |
JAVA 카테고리의 다른 글
Lombok Annotaion) @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
Lombok이란 무엇인가? Lombok IntelliJ 환경에 설치하기
JAVA) GC(Garbage Collector) 동작 방식
JAVA) 변수들의 자료형에 따른 초기값