[자료구조] Array & ArrayList

m5n·2024년 5월 22일

자료구조

목록 보기
4/7

Array❓

  • Array는 같은 타입의 데이터를 연속된 공간에 나열
  • 각 데이터에 인덱스(index)를 부여해놓은 자료구조

arrayImg


Array 특징

  • 배열은 같은 타입의 데이터만 저장 가능
  • 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없음

Array 장점 및 단점

장점

  • 빠른 접근: 배열은 인덱스를 사용하기 때문에 인덱스를 알고 있다면 원하는 위치에 O(1)에 접근 가능
  • 다차원 배열: 배열은 다차원으로 선언 가능
  • 메모리 공간의 효율성: 연속된 메모리 공간에 요소를 저장하므로, 메모리 공간을 효율적으로 사용 가능, 또한 배열의 요소들은 순서대로 저장되기 때문에 캐시 지역성이 좋아 성능 향상에 도움이 됨

단점

  • 크기 제한: 배열은 생성할 때 크기를 정하고 후에 변경이 불가함 (크기를 동작으로 제어 불가)
  • 삽입과 삭제 비용이 큼: 배열의 중간에 요소를 삽입하려면 해당 위치 이후의 요소들을 모두 이동시키기 때문에 O(n)의 시간 복잡도를 가짐

Array 사용법

Array 선언

int[] intArr = {};					// 값과 사이즈 모두 없는 빈 배열 선언
int[] intArr2 = new int[3];			// 사이즈는 존재하지만 값이 없는 빈 배열
int[] intArr3 = {1, 2, 3, 4, 5};	// 사이즈가 자동 지정된 값이 있는 배열

Array 사용

int[] intArr3 = {1, 2, 3, 4, 5};

int idx3 = intArr3[3];			// 배열의 값 참조
int arrLen = intArr3.length; 	// 배열의 길이 반환

// 배열의 원소 접근 (for 문)
for(int i = 0; i < arrLen; ++i) {
	System.out.println(intArr3[i]);
}

// 배열의 원소 접근 (for each 문)
for(int elem: intArr3) {
	System.out.println(elem);
}


ArrayList❓

  • Array는 정적인 크기를 가지고 있기 때문에 크기 변경 불가
  • 배열의 크기를 동적으로 변경할 수 있도록 Java에서 제공해주는 클래스

ArrayList 특징

  1. 동적 크기 조정
    • ArrayList는 내부적으로 배열을 사용
    • 요소를 추가하거나 삭제할 때 필요에 따라 크기를 동적으로 조정
    • 크기 제한이 없고, 유연하게 요소를 관리 할 수 있음
  2. 요소 접근
    • 배열과 마찬가지로 인덱스를 사용해 요소 접근 가능
    • 인덱스를 사용하여 요소에 빠르게 접근 가능
  3. 제네릭 타입
    • 제네릭을 사용해서 타입 안정성을 제공
    • 잘못된 타입의 요소 추가 방지
  4. 여러 메소드 제공
    • ArrayList는 배열을 다루기 위한 여러 메소드를 제공해주기 때문에 다루기가 더 용이함

ArrayList 사용법

ArrayList 선언

import java.util.ArrayList;

List<Integer> list = new ArrayList<>();

ArrayList 값 추가

List<Integer> list = new ArrayList<>();

list.add(1);		// list에 1 추가
list.add(2);		// list에 2 추가
list.add(3);		// list에 3 추가

list.add(1, 15);	// 1번째 인덱스 위치에 15 추가

list.set(1, 50); 	// 1번째 인덱스에 있는 값 50으로 변경

ArrayList 값 삭제

List<Integer> list = new ArrayList<>();

list.remove(); 		// list의 마지막 요소 삭제
list.remove(0);		// list의 0번째 요소 삭제

ArrayList 요소 접근

List<Integer> list = new ArrayList<>();

list.get(0);		// 0번째 인덱스에 있는 값 접근
list.indexOf(3)		// 3이 저장되어 있는 인덱스 반환

ArrayList 기타 메서드

List<Integer> list = new ArrayList<>();

list.size();								// list의 크기 출력
list.isEmpty();								// list가 비었으면 true, 그렇지 않으면 false 반환
list.contains(1)							// list가 1 값을 가지고 있으면 true, 없으면 false 반환
list.clear(); 								// list에 들어있는 모든 값 초기화

List<Integer> newList = list.subList(1,3);	// list의 부분 요소만 이용하여 새로운 배열 생성 (index: 1~2)

Collections.sort(list);						// list 오름차순 정렬


Reference

https://hoehen-flug.tistory.com/28
https://junjangsee.github.io/2019/07/25/java/arraylist-Method/

profile
steady

0개의 댓글