java

2022.09.01 java 배열

Han_5ung 2022. 9. 4. 23:48

배열

같은 타입의 변수들로 이루어진 유한 집합

배열의 값을 '요소'라고 하며 위치를 가리키는 숫자를 '인덱스'라고 한다.

자바의 인덱스는 0부터 시작한다.

 

1차원 배열

선언

타입[] 배열이름;
타입 배열이름[];

//ex)
int[] arr;
int arr[];
  • 단순 배열 선언

생성

배열이름 = new타입[배열길이];
타입[] 배열이름 = new타입[배열길이];

//ex)
arr = new int[10];
int[] arr = new int[5];

 

  • 대괄호 안에 길이를 지정하여 배열을 생성

초기화

인덱스를 이용한 초기화

int[] arr = new int[5];	//길이가 5인 int형 배열 생성

arr[0] = 10;	//인덱스를 이용한 배열 초기화
arr[1] = 20;	//인덱스1에 20 저장
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

System.out.println(Arrays.toString(arr));	//[10, 20, 30, 40, 50]
  • 배열이름[인덱스값] = 저장할 값;
  • 배열의 길이를 초과하는 인덱스를 사용하면 예외 발생

선언과 동시에 초기화

타입[] 배열이름 = new 타입이름[] {배열요소1,배열요소2,...};
타입[] 배열이름 = {배열요소1,배열요소2,...};

ex)
int[] arr = new int[]{1,2,3,4,5};	//[1,2,3,4,5]
int[] arr2 = {1,2,3,4,5};	//[1,2,3,4,5]
  • 괄호를 사용하여 선언과 동시에 초기화
  • 배열의 요소만큼 길이가 설정

2차원 배열

선언

타입[][] 변수이름;
변수이름 = new 타입[외부배열크기][내부배열크기]

ex)
int[][] arr;
arr = new int[3][5];
  • 외부배열은 세로, 내부배열은 가로

선언과 동시에 초기화

타입[][] 변수이름 = new 타입[외부배열크기][내부배열크기];

ex)
int[][] arr = new int[3][5];  //세로가 3 가로가 5인 int형 2차원 배열 선언

//값을 넣어 초기화하는 경우
int[][] arr = new int[][]{
    {11,22,33,44},	//세로 3 가로 4인 int형 2차원배열 선언
    {55,66,77,88},	//new int[3][4]와 동일
    {99,110,121,132}
};
System.out.println(Arrays.deepToString(arr));
System.out.println(arr[0][0]);
System.out.println(arr[1][1]);
System.out.println(arr[2][2]);

//출력값
[[11, 22, 33, 44], [55, 66, 77, 88], [99, 110, 121, 132]]
11
66
121
  • 1차원 배열처럼 인덱스에 접근하여 요소 저장 가능
  • 2차원 배열 전체를 출력할 땐 deepToString(배열이름)

가변 배열

2차원 이상의 다차원 배열을 생성할 때 마지막 차수의 길이를 명시하지 않고 자유로운 형태의 배열을 생성

 

선언

타입[][] 변수이름 = new 타입[외부배열크기][];

ex)
int[][] arr = new int[3][];
  • 마지막 차수의 길이를 명시하지 않음

생성

int[][] arr = new int[3][];

arr[0] = new int[3];	//인덱스0 행의 열은 3
arr[1] = new int[4];	//인덱스1 행의 열은 4
arr[2] = new int[5];	//인덱스2 행의 열은 5

System.out.println(Arrays.toString(arr[0]);
System.out.println(Arrays.toString(arr[1]);
System.out.println(Arrays.toString(arr[2]);

//출력값
[0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0, 0]
  • 각 행과 열의 크기가 자유로움
  • 변수이름[행 인덱스] = new 타입[열 크기]

생성과 동시에 초기화

int[][] arr = {
    {11,22,33},
    {44,55,66,77},
    {88,99,110,121,132}
};

System.out.println(Arrays.toString(arr[0]);
System.out.println(Arrays.toString(arr[1]);
System.out.println(Arrays.toString(arr[2]);

배열 복사 명령어

System.arraycopy() - 배열 복사

System.arraycopy(원본배열, 원본 배열의 복사위치, 붙여넣을 배열, 붙여넣을 배열의 시작 위치, 복사할 개수);

ex)

int[] a = {1,2,3,4,5};
int[] b = new int[5];

System.arraycopy(a, 0, b, 0, a.length);
//a의 인덱스 0부터 a의 길이만큼 복사하여 b의 처음부터 붙여넣기

System.out.println(Arrays.toString(b));
//출력값
[1, 2, 3, 4, 5]
  • 원본 배열에서 복사할 시작, 끝 위치, 개수를 지정할 수 있음
  • 붙여 넣을 배열의 시작 위치를 지정할 수 있음

 

Arrays.copyOf() - 배열 복사

Arrays.copyOf(원본 배열, 복사할 길이);

ex)

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

b = Arrays.copyOf(a, 3);	//a배열의 인덱스0부터 3개 복사
System.out.println(Arrays.toString(b));

//출력값
[1, 2, 3]

 

  • 시작 위치 및 붙여 넣을 위치를 지정하지 못 함
  • 인덱스 0부터 지정된 길이까지 그대로 복사