[Java] 컬렉션(List) : ArrayList, LinkedList

정재현·2024년 1월 3일

Java

목록 보기
18/43
post-thumbnail

목차

  • List 정의
  • Array List
  • Linked List
  • Stack

List

  • 정의 : 배열 인터페이스(추상적 자료구조)
    • Java의 다형성에 의해서 list를 List 자료형으로 선언할 경우, 그 구현체를 ArrayList 또는 LinkedList로 구현할 수 있다.
  • 순서가 있는 데이터의 집합 (데이터 중복 허용)
    • 배열(Array)처럼 일렬로 데이터를 저장하고 조회하여 순번값(인덱스)로 값을 하나씩 조회가능한 배열
    • 배열(Array)처럼 크기가 정해져 있지않고 필요할때마다 크기가 점점 더 늘어남
      • Array : 정적 배열
      • ArrayList : 동적배열

ArrayList

  • 생성 시점에 작은 연속된 공간을 요청해서 참조 변수들을 담아 놓음
    • 값이 추가될 때 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장하므로 상관 없음

기능

  • 선언
    아래와 같은 형태로 선언
ArrayList<Integer> intList
  • 생성
    아래와 같은 형태로 생성
new ArrayList<Integer>()
  • 초기화
    사이즈를 지정하는것이 없기 때문에 초기화가 필요없다

  • 값 추가
    아래와 같은 형태로 값 추가

intList.add(추가할 값)
  • 값 수정
    아래와 같은 형태로 값 수정
intList.set(수정할 순번, 수정할 값)
  • 값 삭제
    아래와 같은 형태로 값 삭제
intList.remove(삭제할 순번)
  • 전체 출력
    아래와 같은 방식으로 전체 내용 출력
intList.toString()
// 전체 값을 대괄호`[]`로 묶어서 출력
  • 전체 제거
    아래와 같은 방식으로 전체 내용 삭제
intList.clear()

예시

// ArrayList 
// (사용하기 위해선 import java.util.ArrayList; 를 추가해야합니다.)
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) {
		ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 및 생성
		
		intList.add(1);
		intList.add(2);
		intList.add(3);
		
		System.out.println(intList.get(0)); // 1 출력
		System.out.println(intList.get(1)); // 2 출력
		System.out.println(intList.get(2)); // 3 출력
		System.out.println(intList.toString()); // [1,2,3] 출력
		
		intList.set(1, 10); // 1번순번의 값을 10으로 수정합니다.
		System.out.println(intList.get(1)); // 10 출력
		
		
		intList.remove(1); // 1번순번의 값을 삭제합니다.
		System.out.println(intList.toString()); // [1,3] 출력
		
		intList.clear(); // 전체 값을 삭제합니다.
		System.out.println(intList.toString()); // [] 출력
	}
}

LinkedList

  • LinkedList 는 생성시점에 메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장하는 배열
  • 기본적인 기능은 ArrayList 와 동일하지만 LinkedList 는 값을 나누어 담기 때문에 모든값을 조회하는 속도가 느림
  • 대신 값을 중간에 추가하거나 삭제가 가능하고 속도가 빠름

기능

  • 선언
    아래와 같은 방법으로 선언
LinkedList<Integer> linkedList
  • 생성
    아래와 같은 방법으로 생성
new LinkedList<Integer>()
  • 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.

  • 값 추가
    아래와 같은 방법으로 값 추가

linkedList.add(추가할 값)
  • 값 중간에 추가
    아래와 같은 방법으로 값 중간에 추가
linkedList.add(추가할 순번, 추가할 값)
  • 값 수정
    아래와 같은 방법으로 값 수정
linkedList.set(수정할 순번, 수정할 값)
  • 값 삭제
    아래와 같은 방법으로 값 삭제
linkedList.remove(삭제할 순번)
  • 전체 출력
    아래와 같은 방법으로 값 출력
linkedList.toString()
// 전체 값을 대괄호`[]`로 묶어서 출력
// ArrayList의 toString()보다는 느림
  • 전체 제거
    아래와 같은 방법으로 전체 제거
linkedList.clear()

예시

// LinkedList 
// (사용하기 위해선 import java.util.LinkedList; 를 추가해야합니다.)
import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {
		LinkedList<Integer> linkedList = new LinkedList<>(); // 선언 및 생성

		linkedList.add(1);
		linkedList.add(2);
		linkedList.add(3);

		System.out.println(linkedList.get(0)); // 1 출력
		System.out.println(linkedList.get(1)); // 2 출력
		System.out.println(linkedList.get(2)); // 3 출력
		System.out.println(linkedList.toString()); // [1,2,3] 출력 (속도 느림)

		linkedList.add(2, 4); // 2번 순번에 4 값을 추가합니다.
		System.out.println(linkedList); // [1,2,4,3] 출력

		linkedList.set(1, 10); // 1번순번의 값을 10으로 수정합니다.
		System.out.println(linkedList.get(1)); // 10 출력

		linkedList.remove(1); // 1번순번의 값을 삭제합니다.
		System.out.println(linkedList); // [1,4,3] 출력

		linkedList.clear(); // 전체 값을 삭제합니다.
		System.out.println(linkedList); // [] 출력
	}
}

Tip

  • ArrayList와 LinkedList모두 List를 활용해서 생성이 가능하다
    • List는 인터페이스이기 때문
List<type> arr = new ArrayList<>();
List<type> arr2 = new LinkedList<>();

profile
공부 기록 보관소

0개의 댓글