본문 바로가기
Java

List

by 우 석 2024. 1. 5.

자바 표준 라이브러리에 Collection 클래스의 일부인 List에 대해 정리하겠습니다.

 

List 인터페이스는 Collection 인터페이스를 확장하고 요소의 시퀀스 또는 목록에 대한 특정 동작을 추가합니다. 또한 List 인터페이스를 구현하는 가장 일반적으로 사용되는 클래스는 ArrayList, LinkedList가 있습니다.

 

1. ArrayList

  • ArrayList는 Java의 List 인터페이스의 동적 배열 구현입니다.
  • 즉, 요소가 추가되거나 제거될 때 동적으로 크기를 조정할 수 있습니다.
  • LinkedList보다 메모리 오버헤드가 덜 필요하므로 메모리 효율성이 더 높습니다.
  • 인덱스를 사용하여 요소에 대해 빠르고 효율적인 액세스를 제공합니다. 시간 복잡도 O(1)
  • 요소를 삽입, 삭제하는 것은 비효율적일 수 있습니다. 시간복잡도 O(n)
ArrayList<Integer> names;       // 참조변수 선언
names = new ArrayList<Integer>(); // ArrayList 인스턴스 구성

intList.add({"추가할 값"}); // 값 추가
intList.set({"수정할 순번"}, {"수정할 값"}); // {"수정할 값"}); 값 수정
intList.remove({"삭제할 순번"}); // 값 삭제
intList.toString(); // 전체 출력
intList.clear(); // 전체 제거

 

2. LinkedList 

  • 참조 업데이트가 포함되므로 목록 중간에서 빈번한 삽입 및 삭제에 효율적입니다. 시간 복잡도 O(1)
  • 요소는 연결리스트의 노드로 저장되며 각 노드에는 다음 및 이전 노드에 대한 참조가 포함됩니다.
  • 연속적인 메모리 할당이 없이, 요소는 메모리에 흩어져 있습니다.
  • 다음 및 이전 노드에 대한 참조를 저장하는 오버헤드로 인해 요소당 더 많은 메모리가 필요합니다.
  • 인덱스로 요소에 액세스 하는 것은 목록의 처음이나 끝에서 순회해야 하기 때문에 'ArrayList'보다 효율성이 떨어집니다. O(n)
linkedList.add({"추가할 값"}); // 값 추가 
linkedList.add({"추가할 순번"}, {"추가할 값"}); // 값 중간에 추가
linkedList.set({"수정할 순번"}, {"수정할 값"}); // 값 수정 :
linkedList.remove({"삭제할 순번"}); // 값 삭제 :
linkedList.toString(); // 전체 출력 :
linkedList.clear(); // 전체 제거 

 

3. 정리

ArrayList는 랜덤 액세스 및 순회가 빈번한 상황에서 즉, 빠른 무작위 액세스가 필요하고 목록을 자주 수정하지 않는 경우 유리하며, LinkedList는 삽입이나 삭제가 자주 발생하고 임의 액세스가 덜 중요한 상황에서 유리합니다.

 

 

'Java' 카테고리의 다른 글

상속 (Inheritance)  (0) 2024.01.09
접근 제어자 (Access Modifier), Getter, Setter  (0) 2024.01.08
메서드(method)  (0) 2024.01.04
객체지향 프로그래밍  (2) 2024.01.03
자료구조(Data Structure) - Java  (1) 2024.01.02