Java List 인터페이스와 주요 구현 클래스 분석

Collection 인터페이스 개요

List 인터페이스를 이해하기 전에 먼저 Collection 인터페이스를 살펴보아야 합니다. Collection 인터페이스는 List, Set, Queue 인터페이스의 상위 인터페이스로, 이러한 컬렉션 구현 클래스들의 많은 메서드들이 Collection에서 정의된 메서드를 호출합니다.

Collection 인터페이스 메서드 분류

Collection 인터페이스에는 다음과 같은 메서드들이 정의되어 있습니다:

데이터 조작 메서드

  • add / addAll
  • remove / removeAll
  • clear
  • retainAll
  • iterator

검증 메서드

  • contains / containsAll
  • equals / hashCode
  • isEmpty
  • size
import java.util.ArrayList;
import java.util.Collection;

public class CollectionValidationExample {
    public static void main(String[] args) {
        Collection<String> primaryCollection = new ArrayList<>();
        primaryCollection.add("A");
        primaryCollection.add("B");
        primaryCollection.add("C");
        
        Collection<String> secondaryCollection = new ArrayList<>();
        secondaryCollection.add("D");
        secondaryCollection.add("E");
        secondaryCollection.add("F");
        
        System.out.println("A 포함 여부: " + primaryCollection.contains("A"));
        System.out.println("모든 요소 포함 여부: " + primaryCollection.containsAll(secondaryCollection));
        System.out.println("컬렉션 동등성: " + primaryCollection.equals(secondaryCollection));
        System.out.println("해시코드 비교: " + primaryCollection.hashCode() + ", " + secondaryCollection.hashCode());
        System.out.println("빈 컬렉션 여부: " + primaryCollection.isEmpty());
        System.out.println("컬렉션 크기: " + primaryCollection.size());
    }
}

List 인터페이스 확장 기능

List 인터페이스는 Collection 인터페이스를 확장하여 다음과 같은 고유한 메서드들을 추가했습니다:

인덱스 기반 요소 조작

  • add(int index, E element)
  • addAll(int index, Collection<? extends E> c)
  • remove(int index)

요소 접근 및 수정

  • get(int index)
  • set(int index, E element)

기타 유용한 메서드

  • subList(int fromIndex, int toIndex)
  • indexOf(Object o) / lastIndexOf(Object o)
  • listIterator() / listIterator(int index)
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListOperationsExample {
    public static void main(String[] args) {
        List<String> dataList = new ArrayList<>();
        dataList.add("Alpha");
        dataList.add("Gamma");
        
        dataList.add(1, "Beta");
        dataList.remove(0);
        
        System.out.println("첫 번째 요소: " + dataList.get(0));
        dataList.set(0, "Alpha");
        
        List<String> partialList = dataList.subList(1, dataList.size());
        System.out.println("Beta 위치: " + dataList.indexOf("Beta"));
        
        ListIterator<String> iterator = dataList.listIterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

ArrayList 구현 클래스

ArrayList는 List 인터페이스를 구현하는 동적 배열입니다. 다음과 같은 고유 메서드를 제공합니다:

  • clone() - 컬렉션 복사
  • ensureCapacity(int minCapacity) - 용량 확보
  • trimToSize() - 크기 최적화
  • removeRange(int fromIndex, int toIndex) - 범위 삭제 (protected)
import java.util.ArrayList;

public class ArrayListFeatures {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("Kim");
        names.add("Lee");
        names.add("Park");
        
        @SuppressWarnings("unchecked")
        ArrayList<String> clonedNames = (ArrayList<String>) names.clone();
        
        names.ensureCapacity(10);
        names.trimToSize();
    }
}

LinkedList 구현 클래스

LinkedList는 이중 연결 리스트를 구현한 컬렉션으로, List 인터페이스뿐만 아니라 Deque 인터페이스도 구현합니다.

import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
    public static void main(String[] args) {
        List<String> linkedData = new LinkedList<>();
        linkedData.add("First");
        linkedData.add("Second");
        linkedData.add("Third");
        
        linkedData.remove(1);
        linkedData.set(0, "Modified");
        
        for(String item : linkedData) {
            System.out.println(item);
        }
    }
}

Vector 및 Stack 구현 클래스

Vector는 스레드 안전한 동적 배열 구현체이며, Stack은 Vector를 상속받은 LIFO 구조의 컬렉션입니다.

import java.util.Stack;
import java.util.Vector;

public class VectorStackExamples {
    public static void main(String[] args) {
        Vector<String> threadSafeList = new Vector<>();
        threadSafeList.add("Safe1");
        threadSafeList.add("Safe2");
        
        Stack<String> stack = new Stack<>();
        stack.push("Bottom");
        stack.push("Middle");
        stack.push("Top");
        
        while(!stack.isEmpty()) {
            System.out.println(stack.pop());
        }
    }
}

태그: java list ArrayList LinkedList vector

8월 30일 23:23에 게시됨