키보드워리어

[자바] 컬렉션 소개: Java의 List 이해 본문

JAVA/입문

[자바] 컬렉션 소개: Java의 List 이해

꽉 쥔 주먹속에 안경닦이 2023. 3. 16. 23:35
728x90

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

오늘은컬렉션(Collection)에 대해 알아보겠습니다.

 


 

컬렉션 소개

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html

 

List (Java SE 17 & JDK 17)

Type Parameters: E - the type of elements in this list All Superinterfaces: Collection , Iterable All Known Implementing Classes: AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList

docs.oracle.com

 

Java 컬렉션은 Java에서 복잡한 데이터 구조를 관리하는 데 도움이 되는 일련의 클래스 및 인터페이스를 제공합니다.

크기가 고정되고 기능이 제한된 배열과 달리 컬렉션은 요소 추가, 제거 및 수정과 같은 보다 동적인 기능을 제공합니다. 그래서 컬렉션을 사용하면 Java에서 데이터 구조 작업을 더 쉽게 수행할 수 있으며 개발자는 논리 회로에만 집중하면 되는 거예요.

 

 

 

자바 List 이해 - ArrayList, LinkedList, Vector

List는 Collection을 확장하는 Collection 인터페이스로 정렬된 요소 컬렉션을 저장하고 관리할 수 있습니다.

 

목록의 요소는 인덱스로 액세스 할 수 있으며 복제할 수 있습니다.

 

List에는 ArrayList, LinkedList 및 Vector를 비롯한 여러 가지 구현이 있습니다.

 

먼저 ArrayList입니다. ArrayList는 배열을 사용하여 구현되는 크기 조정 가능한 배열입니다. 동기화되지 않은 클래스이며 고정 시간 및 복잡한 알고리즘에 사용할 수 있습니다. 동기화된 메서드를 사용할 필요가 없는 경우 ArrayList가 Vector보다 빠릅니다.

import java.util.ArrayList;

public class ExampleArrayList {
  public static void main(String[] args) {
    // 문자열(String)을 저장하는 새로운 ArrayList 생성
    ArrayList<String> fruits = new ArrayList<>();

    // ArrayList에 요소 추가
    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Cherry");

    // ArrayList의 내용을 출력
    System.out.println("과일: " + fruits);

    // ArrayList에서 요소 삭제
    fruits.remove("Banana");

    // 업데이트된 ArrayList의 내용을 출력
    System.out.println("업데이트된 과일: " + fruits);
  }
}


LinkedList: LinkedList는 포인터를 사용하여 구현되는 이중 연결 목록입니다. 동기화되지 않은 클래스이며 삽입 및 제거 작업이 빈번한 상황에 가장 적합합니다. 인덱스로 요소에 액세스할 때 ArrayList보다 느립니다. LinkedList는 단일 스레드 환경에서도 사용하기에 적합합니다.

import java.util.LinkedList;

public class ExampleLinkedList {
  public static void main(String[] args) {
    // 정수(Integer)를 저장하는 새로운 LinkedList 생성
    LinkedList<Integer> numbers = new LinkedList<>();

    // LinkedList에 요소 추가
    numbers.add(1);
    numbers.add(2);
    numbers.add(3);

    // LinkedList의 내용을 출력
    System.out.println("숫자: " + numbers);

    // LinkedList에서 요소 삭제
    numbers.removeFirst();

    // 업데이트된 LinkedList의 내용을 출력
    System.out.println("업데이트된 숫자: " + numbers);
  }
}


Vector: 벡터는 배열을 사용하여 구현되는 크기 조정 가능한 배열입니다. 동기화된 클래스이며 다중 스레드 환경에서 사용하기에 적합합니다. 벡터는 동기화 오버헤드 때문에 ArrayList보다 느립니다. 하지만 Vector의 경우 Synchronize 키워드를 보실 수 있어요. 나중에 thread에 대해 소개하겠지만, 단일 스레드에선 Vector가 좀 더 안정성을 추구합니다.

 

Java Collections은 데이터 구조를 더 동적으로 관리하고 조작하는 강력한 방법을 제공합니다.

 

이러한 Collections을 사용함으로써, 우리는 중요한 로직에 집중할 수 있고, 요소를 삽입하거나 제거하는 복잡성을 회피할 수 있습니다.

오늘 포스트에서는 List를 중점적으로 살펴보았으며, 순서가 있는 특징을 가지고 있어 특정 위치에서 요소를 가져올 수 있었습니다.

 

또한 List는 중복 요소를 가질 수 있다는 특징을 가지고 있으며, 참고로 저희가 지금까지 썼던 length() 메서드는 Collections에서 size() 메서드로 대체됩니다!

 



Java 개발자라면 Java Collections을 습득하는 것은 필수적인 기술이며, 다양한 Collection 클래스의 차이점을 이해하는 것은 보다 효율적이고 효과적인 코드 작성을 가능하게 합니다. Java 개발자로서, Collections에 대한 이해와 활용을 깊이 있게 공부하고, 적절한 Collection 클래스를 선택하여 우리의 코드를 최적화하는 것이 중요합니다.

728x90