List
는 순서가 있는 데이터 집합을 나타냅니다.List
는 요소의 순서를 유지하며, 중복된 요소를 포함할 수 있습니다. 따라서 데이터의 삽입 순서가 중요하거나 동일한 요소를 여러 번 포함해야 하는 경우에List
를 사용할 수 있습니다.List
의 주요 구현 클래스로는ArrayList
와LinkedList
가 있습니다.
배열 기반 자료구조이지만 공간의 확보 및 확장은 ArrayList
인스턴스가 스스로 처리한다.
ArrayList
는 컬렉션 프레임워크에서 제공하는 클래스 중 하나로, 크기가 가변적인 배열로 데이터를 저장하는 자료구조입니다. ArrayList
는 List 인터페이스를 구현하므로 순서가 있는 데이터 집합으로, 중복된 요소를 포함할 수 있습니다.
ArrayList
는 배열 기반으로 구현되어 있으며, 내부적으로 배열을 사용하여 데이터를 저장합니다. 배열의 크기는 필요에 따라 자동으로 조정되므로 크기 조정에 대한 걱정 없이 요소를 추가하거나 삭제할 수 있습니다.
ArrayList
의 몇 가지 중요한 기능(LinkedList도 동일한 기능 제공):
요소의 추가 및 삭제: ArrayList는 add()
메서드를 사용하여 요소를 추가하고, remove()
메서드를 사용하여 요소를 삭제할 수 있습니다. 또한, 요소를 인덱스를 통해 직접적으로 접근하여 수정할 수도 있습니다.
요소의 접근: ArrayList는 get()
메서드를 사용하여 인덱스를 통해 특정 위치의 요소에 접근할 수 있습니다. 이를 통해 요소를 검색하거나 수정할 수 있습니다.
크기 관리: ArrayList는 size()
메서드를 사용하여 현재 저장된 요소의 개수를 확인할 수 있습니다. 이를 통해 ArrayList의 크기를 동적으로 파악할 수 있습니다.
반복문 사용: ArrayList는 for-each
루프나 Iterator
를 통해 요소를 반복하여 처리할 수 있습니다. 이를 통해 저장된 데이터를 효율적으로 처리할 수 있습니다.
사용 예시
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
// ArrayList 생성
ArrayList<String> fruits = new ArrayList<>();
// 요소 추가
fruits.add("사과");
fruits.add("바나나");
fruits.add("딸기");
// 요소 접근
System.out.println(fruits.get(1)); // 출력: 바나나
// 요소 수정
fruits.set(0, "오렌지");
// 크기 확인
System.out.println(fruits.size()); // 출력: 3
// 요소 반복 처리
for (String fruit : fruits) {
System.out.println(fruit);
}
/*
출력:
오렌지
바나나
딸기
*/
// 요소 삭제
fruits.remove(2);
// 요소 존재 여부 확인
System.out.println(fruits.contains("딸기")); // 출력: false
}
}
ArrayList
는 다른 컬렉션 클래스와 함께 사용되며, 데이터의 추가, 삭제, 검색 등 다양한 작업을 효율적으로 수행할 수 있습니다. 그러나 ArrayList
는 요소를 삽입하거나 삭제할 때마다 내부 배열을 재배치해야 하므로, 요소의 추가/삭제 작업이 빈번하게 일어날 경우에는 LinkedList와 같은 다른 자료구조를 고려해야 합니다.
LinkedList
는 컬렉션 프레임워크에서 제공하는 클래스 중 하나로, 연결 리스트(linked list)를 기반으로 데이터를 저장하는 자료구조입니다. LinkedList
는 List 인터페이스를 구현하므로 순서가 있는 데이터 집합으로, 중복된 요소를 포함할 수 있습니다.
LinkedList
는 데이터를 노드(node)로 표현하고, 각 노드는 자신의 데이터와 다음 노드를 가리키는 링크(link)를 가지고 있습니다. 이렇게 연결된 노드들로 데이터를 관리합니다. 따라서 LinkedList는 데이터의 삽입과 삭제가 빈번하게 일어나는 상황에서 유리한 자료구조입니다.
이중 연결 리스트: LinkedList는 각 노드가 이전 노드와 다음 노드를 가리키는 링크를 가지는 이중 연결 리스트(doubly linked list)
입니다. 이로 인해 양쪽 방향으로 요소에 접근할 수 있습니다.
LinkedList
는 요소의 추가/삭제 작업이 빈번한 경우에 유용합니다. 그러나 요소의 접근 시에는 일반적으로 ArrayList
보다 느릴 수 있습니다. LinkedList는 특히 스택(Stack)이나 큐(Queue)와 같은 자료구조의 구현에 적합합니다.
ArrayList
Linkedlist