리스트(List)의 개념은 위의 게시글을 참고하자
컬렉션 프레임워크 - 컬렉션 인터페이스 - 리스트 인터페이스
List 인터페이스는 java.util 패키지에 있는 컬렉션 프레임워크의 일부다. List는 객체들의 순서가 있는 컬렉션을 나타내며, 같은 객체의 중복 저장을 허용한다. 이 리스트는 배열과 비슷하지만, 크기가 동적으로 변화하는 컬렉션을 다룰 때 유연하게 사용할 수 있다.
List 인터페이스는 ArrayList, LinkedList 와 같은 여러 구현 클래스를 가지고 있으며, 각 클래스는 List 인터페이스의 메서드를 구현한다.
[List 인터페이스의 주요 메서드]
java.util.ArrayList
ㅇArrayList: 배열을 이용한 리스트 구조
- 기본 CAPACITY는 10(CAPACITY를 초과하면 배열을 50%씩 증가시킨다)
- 메모리 고속 복사 연산을 사용한다 - System.arraycopy()
java.util.LinkedList
ㅇLinkedList: 이중연결리스트 구조
- 첫 번째 노드와 마지막 노드 둘 다 참조한다
class Node {
E item;
Node next;
Node prev;
}
class LinkedList {
Node first; // 첫 번째 노드 참조
Node last; // 마지막 노드 참조
int size;
}
[성능 비교 표] (size = 50000, loop = 10000)
이론적으로 LinkedList가 중간 삽입에 있어 더 효율적일 수 있지만, 현대 컴퓨터 시스템의 메모리 접근 패턴, CPU 캐시 최적화, 메모리 고속 복사 등을 고려할 때 ArrayList가 실제 사용 환경에서 더 나은 성능을 보여주는 경우가 많다. 따라서 대부분의 경우 배열 리스트가 성능 상 유리하다. 이런 이유로 실무에서는 주로 ArrayList(배열리스트)를 기본으로 사용한다.
(만약 몇백만 건의 대용량 데이터를 앞쪽에서 자주 추가하거나 삭제할 일이 있다면 LinkedList(연결리스트)를 고려하자)
(ArrayList 사용 예시 코드)
package collection.list.ex1;
import java.util.ArrayList;
public class ListEx1 {
public static void main(String[] args) {
ArrayList<Integer> students = new ArrayList<>();
// List<Integer> students = new ArrayList<>();
students.add(90);
students.add(80);
students.add(70);
students.add(60);
students.add(50);
int total = 0;
for (int i = 0; i < students.size(); i++) {
total += students.get(i);
}
double average = (double) total / students.size();
System.out.println("점수 총합: " + total);
System.out.println("점수 총합: " + average);
}
}
참고 및 출처: 김영한의 실전 자바 - 중급 2편
'Language > Java' 카테고리의 다른 글
[Java API] Map 인터페이스(HashMap, LinkedHashMap, TreeMap) (0) | 2024.09.21 |
---|---|
[Java API] Set 인터페이스(HashSet, LinkedHashSet, TreeSet) (0) | 2024.09.19 |
[Java API] 컬렉션 프레임워크(Collection Framework) (0) | 2024.09.18 |
[Java] 제네릭은 처음부터 있었던 문법이 아니다(feat. raw type, type eraser) (1) | 2024.09.16 |
[Java API] 예외계층구조 핵심 그림 (0) | 2024.09.16 |