Home Array
Post
Cancel

Array

배열

자료형의 집합

  • 같은 타입의 변수들로 이루어져있다.
  • 크기가 정해져있다.
  • 인접한 메모리 위치에 있는 데이터를 모아놓은 집합이다.
  • 중복을 허용하고 순서(index)가 있다.


🐣 index는 0부터 시작한다.




시간 복잡도

여기서 설명하는 배열은 ‘정적 배열’을 기반으로 설명한다.


💬 정적 배열?

1
2
3
4
5
6
7
8
배열은 연속해있는 자료의 집합이며 각 자료는 번호를 가진다.                    
  
번호는 n개를 원소로 가지는 배열일 때 순서대로 0 ~ n-1의 번호를 가지며                      
프로그래밍 언어에 따라서 1~n개를 가지는 배열도 짤 수 있다.                     

배열의 크기가 한번 정해지면 배열의 크기를 바꿀수 없다                   

배열의 크기를 바꾸려면 배열을 동적할당으로 할당해야한다.    



탐색에 O(1)이 되어 랜덤 접근(random access)이 가능하다.

삽입과 삭제에는 O(n)이 걸린다.

삽입하는데 걸리는 시간은 O(1) 이 되지만 이미 있던 데이터를 전부 밀어버려야 한다.

삭제 또한 하나를 삭제하면 그 공간만큼 당겨야 하므로 O(n)의 시간이 걸린다.




랜덤 접근과 순차적 접근

  • Random Access: 어떤 요소에 바로 접근하는 것

    image

  • Sequential Access: 어떤 요소에 접근할 때, 처음부터 차례차례 접근하는 것

    image

직접 접근이라고 하는 랜덤 접근은 동일한 시간에 배열과 같은 순차적인 데이터가 있을 때
임의의 인덱스에 해당하는 데이터에 접근할 수 있는 기능이다.

이는 데이터를 저장 된 순서대로 검색해야하는 순차적 접근과는 반대이다.




배열의 필요성

연관성 있는 데이터를 관리하기 편하다.

1
2
3
4
int student0 = 88;
int student1 = 72
...
int student99 = 96;


배열로 바꾸기
int[] scores = {88, 72, ..., 96};




코드로 보기

배열은 자료형 타입 바로 옆에 [] 기호를 사용하여 표현한다.


ex) int[] : int 자료형의 배열

String[] dogs = {"미니핀", "말티즈", "푸들", "포메"};




배열 생성

2가지가 있다.

  1. 생성과 동시에 초기화

    int[] arr1 = {11, 22, 33, 44};


  1. 먼저 생성 후, 개별 초기화

    1
    2
    3
    4
    5
    
     int[] arr2 = new int[4];
     arr2[0] = 11;
     arr2[1] = 22;
     arr2[2] = 33;
     arr2[3] = 44;
    


🐣 String[] weeks = new String[]; → 길이에 대한 숫자값이 없으므로 컴파일 오류가 발생한다.




배열 사용법

배열 내 값들은 변수명에 인덱스(index)를 표기하여 접근할 수 있다.

ex) array[index]


배열의 길이는 length를 통해 얻을 수 있다.

1
2
int arr3 = {10, 20, 30, 40, 50};
System.out.println(arr3.length);


ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 0: 자바, 1: 수학, 2: 과학, 3: 영어
double[] grades = {4.5, 3.5, 4.0, 3.0};

// 자바 점수 읽기
System.out.println("자바 = " + grades[0]); // 자바 = 4.5

// 자바 점수 변경
grades[0] = 4.0;

// 평균 구하기
double sum = 0;

for (int i = 0; i < grades.length; i++) {
  sum += grades[i];
}

double avg = sum / grades.length; // 3.625 = 14.5 / 4
System.out.printf("평점: %.2f\n", avg); // 평점: 3.63

// %f : 실수형 출력
// %.2f : 소수점 둘째 자리 출력




출처
[면접을 위한 CS 전공지식 노트]
자바 배열이란?
01-자료구조: 배열(Array)->정적배열(Static Array)
03-06 배열 (Array)
[CS스터디] Array와 LinkedList

This post is licensed under CC BY 4.0 by the author.