[Java] 배열
2024. 1. 21. 19:32ㆍ공부 중/Java
1. 배열
가. Array Type
int a
int[] arr
arr
의 타입은 Reference Type 중 Array Type이다.
나. 배열 선언
int[] arr = new int[3];
// int가 들어가는 크기가 3인 배열 선언
arr
는 생성된 배열을 참조하는 reference 타입 변수다.int arr[]
,int[] arr
모두 가능하지만int[]
로 통일해서 사용하자.
int[] b = new int[]{1,2,3,4,5}; //추천
int[] c = {1,2,3,4,5}
- 생성과 초기화를 동시에 가능.
int err[];
err = {1,2,3,4}
- 아래는 에러가 발생함.
- 한 줄 단위로 컴파일하기 때문에 컴파일러가
{1,2,3,4}
를 이해하기 어렵기 때문에.
아래는 자료형마다 가지는 기본값이다.
자료형 | 기본값 |
boolean | false |
char | ‘\u0000’ |
byte, short, int | 0 |
long | 0L |
float | 0.0f |
double | 0.0 |
Reference Type | null (아무것도 참조하지 않음.) |
다. 배열의 성질
배열은 immutable 하다.
배열은 최초 메모리 할당 이후, 변경할 수 없음.
(개별 요소는 변경할 수 있지만, 요소를 추가하거나 삭제할 수 없다.)
int[] scores = {90, 80, 100};
배열에 새로운 점수를 추가하고 싶을 때. (배열 확장)
scores = new int[4]; //가능
scores = new int[]{90, 80, 100, 95}; //가능
scores = Arrays.copyOf(scores, 5); //가능
scores = {90, 80, 100, 95}; //불가능!!!!
scores = {90, 80, 100, 95};
:new int()
를 생략하려면 선언과 할당을 동시에 수행해야 한다. 지금은 선언이 생략되었다.Arrays.copyOf(scores, 5);
:scores
를 복사하고 빈 공간은0
을 채운 크기5
의 배열을 생성.
라. 배열 복사
import java.util.Arrays;
...
int[] arr = new int[]{1, 2, 3, 4};
int[] arr2 = arr; // soft copy. 주소값만 복사
int[] arr3 = Arrays.copyOf(arr, 4); // Deep copy. 새로운 배열 생성 후 복사
arr2는 변수 arr에 저장된 배열의 주소값을 복사할 뿐 정말로 기존의 배열을 복사한 새로운 배열을 생성하는 것은 안니다.
새로운 배열을 생성 후 복사하기 위해서 arr3처럼 Arrays.copyOf() 메서드를 활용하자.
마. 출력
import java.util.Arrays;
...
int[] arr = new int[] {1,2,3,4};
System.out.println(arr.toString());
System.out.println(Arrays.toString(arr));
/*
[I@5b464ce8
[1, 2, 3, 4]
*/
Arrays.toString(arr)
: 쉽게 배열의 값을 출력할 수 있음.
2. 다차원 배열
가. 이차원 배열 선언
int[][] int Array = new int[4][4];
int[][] intArray = new int[4][];
intArray[0] = new int[3];
intArray[1] = new int[2];
// intArray[2] = {1,2,3}; //오류
자바는 다차원 배열의 크기는 가변적이다.
이차원 배열은 1차 배열만 생성 후, 필요에 따라서 2차 배열을 생성할 수 있음.
이는 자바에선 다차원 배열은 “1차원 배열의 연속”이기 때문이다.
(아마 int[] array;
가 가능한 이유랑 같은 듯. 이차원 배열 int[?][]
에는 실제 배열이 아니라 어떤 int[]
의 주소값을 저장하고 있을 뿐이다.)
intArray[2]
, intArray[3]
는 기본값인 null
값을 가짐.
나. 공간복잡도
int[][] brr = new int[2][10];
int[][] brr2 = new int[10][2];
Java에서는 brr
과 brr2
의 공간복잡도는 다르다. (C에선 같음)
brr
이 메모리를 더 작게 차지한다. (작은 것부터)
이 또한 자바에선 다차원 배열은 “1차원 배열의 연속”이기 때문이다.
다. 배열과 반복문
int[][] intArray = new int[4][];
intArray[0] = new int[1];
intArray[1] = new int[2];
intArray[2] = new int[3];
intArray[3] = new int[4];
for(int i = 0; i < intArray.length; i++){
for(int j = 0; j < intArray[i].length; j++){
...
}
}
for(int j = 0; j < intArray[i].length; j++){
: 2차원 배열의 크기가 다를 수 있기 때문에
'공부 중 > Java' 카테고리의 다른 글
[Java] 다형성 (0) | 2024.01.22 |
---|---|
[Java] 상속 (0) | 2024.01.21 |
[Java] 객체지향 (0) | 2024.01.21 |
[Java] 조건문, 반복문 (0) | 2024.01.21 |
[Java] 자료형과 연산자 (0) | 2024.01.21 |