TIL#17-2

DuBu·2023년 6월 30일
0

일본IT JAVA 연수과정

목록 보기
30/61
post-thumbnail

Collection Framework

  • 자료구조 및 알고리즘을 구현해 놓은 일종의 라이브러리
  • 제너릭 기반으로 구현되어 있다.

List

List는 순서가 있는 데이터 집합을 나타냅니다. List는 요소의 순서를 유지하며, 중복된 요소를 포함할 수 있습니다. 따라서 데이터의 삽입 순서가 중요하거나 동일한 요소를 여러 번 포함해야 하는 경우에 List를 사용할 수 있습니다. List의 주요 구현 클래스로는 ArrayListLinkedList가 있습니다.

ArrayList

  • 배열 기반 자료구조이지만 공간의 확보 및 확장은 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

  • LinkedList는 컬렉션 프레임워크에서 제공하는 클래스 중 하나로, 연결 리스트(linked list)를 기반으로 데이터를 저장하는 자료구조입니다. LinkedList는 List 인터페이스를 구현하므로 순서가 있는 데이터 집합으로, 중복된 요소를 포함할 수 있습니다.

  • LinkedList는 데이터를 노드(node)로 표현하고, 각 노드는 자신의 데이터와 다음 노드를 가리키는 링크(link)를 가지고 있습니다. 이렇게 연결된 노드들로 데이터를 관리합니다. 따라서 LinkedList는 데이터의 삽입과 삭제가 빈번하게 일어나는 상황에서 유리한 자료구조입니다.

  • 이중 연결 리스트: LinkedList는 각 노드가 이전 노드와 다음 노드를 가리키는 링크를 가지는 이중 연결 리스트(doubly linked list)입니다. 이로 인해 양쪽 방향으로 요소에 접근할 수 있습니다.

LinkedList요소의 추가/삭제 작업이 빈번한 경우에 유용합니다. 그러나 요소의 접근 시에는 일반적으로 ArrayList보다 느릴 수 있습니다. LinkedList는 특히 스택(Stack)이나 큐(Queue)와 같은 자료구조의 구현에 적합합니다.

ArrayList / LinkedList 의 장단점

  • ArrayList

    • 단점
      • 저장 공간을 늘리는 과정에서 시간이 비교적 많이 소요된다.
      • 인스턴스의 삭제 과정에서 많은 연산이 필요할 수 있다. 따라서 느릴 수 있다.
    • 장점
      • 저장된 인스턴스의 참조가 빠르다.
  • Linkedlist

    • 단점
      • 저장된 인스턴스의 참조 과정이 배열에 비해 복잡하다. 따라서 느릴 수 있다.
    • 장점
      • 저장 공간을 늘리는 과정이 간단하다.
      • 저장된 인스턴스의 삭제 과정이 단순하다.

0개의 댓글