본문 바로가기
Knowledge/자료구조

[ Linear Data Structure ] 배열 ( Array )

by NeuLyeo 2023. 12. 1.

[ Linear Data Structure ] 배열 ( Array )

 

 

 

 

 

 

배열 ( Array )

배열 ( Array )동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 방법이다.

 

예를 들어 배열이 int 타입인 경우 정수 요소만 저장할 수 있고 그 외 타른 타입의 요소는 저장할 수 없다.

 

배열을 구성하는 각각의 값을 요소 ( element )라고 하며,

 

배열의 위치를 가르키는 숫자는 인덱스 ( index )라고 한다.

 

 

 

 

배열 예시


    
// 배열 선언
// type[] name = new type[size]
int[] arr = new int[5];
// 선언 + 초기화
int[] arr1 = {1, 2, 3, 4, 5};
//elements : 1, 2, 3 ,4 ,5
//index : 0, 1, 2, 3 ,4
//size : 5
// 2차원 배열
int[][] arr2 = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}

 

  • 연속된 메모리 공간에 데이터들이 순차적으로 저장되어 있다.

  • 인덱스는 0부터 시작한다.
  • 각 요소는 인덱스를 통해서 다룰 수 있다.

 

 

 

 

배열 특징

  • 많은 수의 데이터를 다룰 때 사용하는 자료 구조

  • 각 데이터를 인덱스와 1 : 1 대응하도록 구성

  • 데이터가 메모리 상에 연속적으로 저장

  • 크기가 고정적이다. 공간이 낭비되거나 데이터의 재배치가 필요할 수 있다.

  • 메모리는 배열이 선언될 때 (컴파일할 때) Stack영역에 할당한다.

 

 

 

배열의 장점

  • 인덱스를 이용하여 데이터에 빠르게 접근 가능 하다.

  • 간단하고 사용하기 쉽다.

 

 

 

배열의 단점

  • 데이터의 추가/삭제가 번거롭다
    • 미리 최대 길이를 정해서 생성해야 한다.
    • 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성한다.
    • 데이터 삭제 시, 크기는 고정되어 있기 때문에, 빈 공간을 유지한다.

 

 

 

 

배열의 시간 복잡도

Operation Average Case Worst Case
read O(1) O(1)
search O(n) O(n)
insert O(n) O(n)
delete O(n) O(n)

 

 

 

 

배열을 사용하는 경우

  • 순차적인 데이터를 저장하며 값보다는 순서가 중요할 때

  • 다차원 데이터를 다룰 때

  • 어떤 특정 요소를 빠르게 읽어야 할 때

  • 데이터 사이즈가 자주 바뀌지 않으면서 요소가 자주 추가되거나 삭제되지 않을 때

 

 

 

 

 

Java _ 배열 사용 방법

배열 선언


    
// size 지정
int[] num = new int[5]

 

 

 

 

배열 값 할당


    
num[0] = 1;
num[1] = 2;
num[2] = 3;
num[3] = 4;
num[4] = 5;

 

 

 

 

배열 특정 요소 확인 및 수정

배열의 index = 2인 값을 수정 및 확인하는 예시

 


    
num[2] = 10
System.out.print(num[2]); // 10

 

 

 

 

배열 크기 확인


    
System.out.print(num.length); // 5

 

 

 

 

배열 반복문


    
for (int i = 0; i < num.length; i++){
System.out.println(num[i]);
}
for (int el : num) {
System.out.println("el : " + el);
}

 

 

 

 

2차원 배열


    
System.out.println("== 2차원 배열 ==");
int[][] arr2 = {{1, 2, 3}, {4, 5, 6}};
System.out.println(arr2[0][1]); // 2
// 2차원 배열 출력
for(int[] row: arr2) {
for(int item: row) {
System.out.println("item = " + item);
}
}

 

 

 

 

 

Array List

배열 ( Array )정적인 크기를 가지므로 크기를 변경할 수 없다.

 

만약 크기를 동적으로 변경해야 하면 Array List와 같은 동적 배열을 사용할 수 있다.

 

 

 

 

Array List의 특징

  1. 동적 크기 조정 : 초기화 할 때 크기를 지정할 필요가 없다.

  2. 참조 타입 ( reference type )만 원소로 저장할 수 있다.

  3. 데이터 중복이 가능하며, null값도 허용한다.

  4. 요소 추가와 삭제 : 요소를 추가 및 삭제 메서드를 제공한다.
    • add() : 리스트의 끝에 요소 추가 또는 특정 인덱스에 요소를 삽입한다.
    • remove() : 특정 인덱스나, 특정 값에 해당하는 요소를 삭제한다.

  5. 자료를 대량으로 추가 및 삭제 시 내부 처리 작업이 늘어나 성능이 떨어진다.

 

 

 

 

Array List 주요 메서드

  • .add((index), val): 순서대로 리스트를 추가, 배열 사이즈 초과 시 초기 설정된 사이즈만큼 자동으로 사이즈가 증가함, 인덱스를 추가로 지정해 주면 해당 인덱스에 값을 삽입

  • .get(index): 해당 인덱스의 값 반환

  • .set(index, val): 인덱스로 값 변경

  • .indexOf(val): 값을 제공하면 해당 값의 첫 번째 인덱스를 반환

  • .lastindexOf(val): 해당 값의 마지막 인덱스 반환

  • .remove(index or val): 해당 인덱스의 값 or 해당 값 중 첫 번째 값 삭제

  • .contains(val): 해당 값이 배열에 있는지 검색해서 true / false 반환

  • .containsAll(val1, val2...): argument로 제공한 컬렉션의 모든 값이 포함되어 있는지 여부를 true / false로 반환

  • .toArray(): ArrayList 타입의 인스턴스를 일반 배열 타입으로 반환, 저장할 배열 타입에 맞춰 자동 형변환, 배열 크기 또한 자동으로 맞춰서 바꿔줌

  • .clear(): 값 모두 삭제

  • .isEmpty(): 비었으면 true, 하나라도 값이 있으면 false 반환

  • .addAll(arr2): 두 컬렉션을 합침

  • .retainAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값을 제외하고 모두 지워줌

  • .removeAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값과 일치하는 값을 모두 지워줌, retainAll() 메서드와 반대

  • .size(): 요소 개수 반환

 

 

 

 

 

Java _ ArrayList 사용 방법

Array List 생성


    
ArrayList list = new ArrayList(Arrays.asList(1, 2, 3));
System.out.println("list = " + list); // list = [1, 2, 3]

 

 

 

 

Array List 원소 추가


    
list.add(4);
list.add(5);
System.out.println("list = " + list); // list = [1, 2, 3, 4, 5]

 

 

 

 

Array List 원소 제거


    
// 원소 제거 (인덱스)
list.remove(2);
System.out.println("list = " + list); // list1 = [1, 2, 4, 5]
// 원소 제거 (값)
list.remove(Integer.valueOf(2));
System.out.println("list = " + list); // list = [1, 4, 5]

 

 

 

 

Array List 2차원 배열


    
ArrayList list2d = new ArrayList();
ArrayList list1d1 = new ArrayList(Arrays.asList(1, 2, 3));
ArrayList list1d2 = new ArrayList(Arrays.asList(4, 5, 6));
list2d.add(list1d1);
list2d.add(list1d2);
System.out.println("list1d1 = " + list1d1); // list1d1 = [1, 2, 3]
System.out.println("list1d2 = " + list1d2); // list1d2 = [4, 5, 6]
System.out.println("list2d = " + list2d); // list2d = [[1, 2, 3], [4, 5, 6]]

 

 

 

 

 

reference

 

[자료구조] 배열(Array) 자료구조 알아보기 & Java 예제 코드(+ ArrayList)

자료구조 중 배열(Array)에 대해 정리해보자. 배열(Array)이란? 배열(Array)은 자료구조 중 하나로, 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 방법이다. 배열은 인덱스(index)를

hoehen-flug.tistory.com

 

[Java] ArrayList 사용법과 주요 메소드

- ArrayList (java.util.arrayList) 생성자 new ArrayList() : 기본 크기가 10인 배열 생성 new ArrayList(기본크기) : 기본 크기를 지정 (배열이 다 차면 기본크기만큼 사이즈가 증가함) new ArrayList() : 배열 값의 타입

da2uns2.tistory.com

 

[자료구조] 배열 (Array)

목차 [자료구조] 배열 (Array) 배열은 연속된 메모리 공간에 순차적으로 저장된 데이터 모음입니다 대부분에 프로그램 언어에서 동일 타입의 데이터를 저장합니다. 예를 들어 배열이 "int"타입인

yoongrammer.tistory.com