본문 바로가기

개발

[Java Array] 자바 배열 개념 정리

배열

 

배열은 동일한 유형의 데이터 요소연속된 메모리 공간에 저장된 데이터 구조입니다. 각 요소는 배열 내에서 고유한 인덱스를 가지며, 이를 사용하여 특정 요소에 접근할 수 있습니다.

 


1차원 배열 생성

 

1️⃣정수형 배열

int[] num;
num = new int[10];

 

2️⃣문자열형 배열 

String name;
name = new String[10];

 

3️⃣문자형 배열

char[] = alphabet;
alphabet = new char[10];

 

4️⃣실수형 배열

double[] temperature;
temperature = new double[10];

 

배열의 인덱스 및 길이

 

✅ 배열의 인덱스

자바 배열의 인덱스는 배열 내 특정 요소의 위치를 가리키는 정수 값입니다. 이 위치는 0부터 배열의 길이 - 1까지의 범위에 있습니다. 배열의 길이는 밑에 알려드리겠습니다.

 

🚫주의 🚫

인덱스는 1번이 아닌 0번부터 세어야 합니다

 

밑에 예시를 보시면 num이라는 int배열에 1,2,3,4,5라는 int형 값이 인덱스0,1,2,3,4에 위치해 있습니다

num의 인덱스 0번은 1을 출력num의 인덱스 1번은 2를 출력num의 인덱스 (배열의 길이 -1)번은 5를 출력합니다

int[] num = {1,2,3,4,5};
System.out.println(num[0]);				//1출력
System.out.println(num[2]);				//3출력
System.out.println(num[num.length-1]);			//5출력

 

배열의 길이

 

배열의 길이는 해당 배열이 포함하는 요소의 수를 나타냅니다. 배열의 길이는 배열이 생성될 때 정적으로 결정되며, 이는 배열이 포함할 수 있는 요소의 최대 수를 의미합니다.

int[] num = {1,2,3,4,5};
System.out.println(num.length);

위의 코드는 1~5까지의 수가 있으므로 배열의 길이는 5입니다

num의 인덱스5번은 없으므로 주의 해야합니다

0~4 까지의 5개의 인덱스에 1~5가 있으므로 만약 5를 출력하고 싶다면 num.length가 5니까 -1을 해줌으로써 인덱스 끝번호인 4를 나타내어서 출력하면 됩니다.

 

인덱스의 끝 번호는 항상 배열변수명.length - 1이 됩니다


 

2차원 배열 생성

 

 

1️⃣ 정수형 2차원 배열

 

int형 2차원배열 2 x 3 크기의 배열생성

int[][] num = new int[2][3];

 

 

 

 

2️⃣ 문자열형 2차원 배열 

 

String형 2차원배열 3 x 3 크기의 배열생성

String[][] name = new String[3][3];

 

 

 

3️⃣ 문자형 2차원 배열 

 

char형 2차원배열 1 x 2 크기의 배열생성

char[][] alphabet = new char[1][2];

 

 

4️⃣ 실수형 2차원 배열 

 

double형 2차원배열 2 x 2 크기의 배열생성

double[][] temperature = new double[2][2];

 


2차원 배열 길이

 

👉2차원 배열의 길이는 2차원이기 때문에 총 2개입니다

👉[2][3] 이라면 세로길이 2 가로길이가 3인 배열을 만든 것 입니다.

 

예시)

int[][] num = {{1,2,3,},{4,5,6}};
System.out.println(num.length);
System.out.println(num[0].length);

 

위의 코드인 int형 2차원배열 2 x 3 크기의 배열생성 했을 때, num.length는 {{1,2,3},{4,5,6}}중에서

{1,2,3} 한칸 {4,5,6} 두칸으로 총 2칸이고 num[0].length는 num[0]인 {1,2,3}이 1,2,3으로 3칸이므로

총 3칸이 되어서 2 X 3칸이 됩니다. 


배열의 시간복잡도

 

1️⃣ 접근

 

접근 (Access): 배열은 인덱스를 사용하여 요소에 직접 접근할 수 있습니다. 이는 인덱스를 사용하므로 O(1)의 시간이 걸립니다.

배열 접근 사진

 

 

2️⃣ 검색

 

검색 (Search): 배열에서 요소를 검색하는 경우, 일반적으로 요소가 정렬되어 있지 않다면 최악의 경우 배열 전체를 순회해야 할 수 있습니다. 따라서 최악의 경우 O(n)의 시간이 소요됩니다.

 

ex) 3을 찾으려면 num[0]~ num[4]까지 하나씩 하나씩 찾아야 한다

 

3️⃣ 추가

 

추가 (Insertion): 배열에서 요소를 추가하는 경우, 특정 위치에 요소를 추가하면 그 위치 이후의 요소들을 이동시켜야 합니다. 따라서 최악의 경우 추가 작업은 O(n)의 시간이 걸립니다. 평균적으로는 O(1)의 시간이 걸리는 경우도 있지만, 최악의 경우 배열의 크기를 조절하고 요소를 복사해야 할 수 있으므로 O(n)의 시간이 걸릴 수도 있습니다.

 

ex) num[6]에 6을 넣는 시간은 O(1)입니다.

 

 

4️⃣ 삭제

 

삭제 (Deletion): 배열에서 요소를 삭제하는 경우, 삭제된 요소 이후의 요소들을 이동시켜야 합니다. 따라서 최악의 경우 삭제 작업은 O(n)의 시간이 걸립니다. 삭제된 요소를 찾는데 O(n)의 시간이 추가로 소요될 수도 있습니다.

 

ex) num[6]와 같이 끝 값을 삭제했다면 그 시간은 O(1)입니다. 하지만 num[2]인 15를 삭제를 했고 빈공간을 없애기 위해 앞으로 당기는 작업은 O(N)입니다.

반응형