Study/JAVA

[Java] 배열(Array)

Reese 2023. 1. 12. 00:21

5.1.1 배열이란?

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
int score1, score2, score3, score4, score5
		⬇
int[] score = new int[5];

 


5.1.2 배열의 선언과 생성

  • 배열의 선언
    • 배열을 다루기 위한 참조변수의 선언
//타입[] 변수이름;
int[] score;

//타입 변수이름[];
int[] score[];

 

  • 배열의 생성
타입[] 변수이름;           //배열을 선언(배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]  //배열을 생성(실제 저장공간을 생성)

int[] score;              //int타입의 배열을 다루기 위한 참조변수 score 선언
score = new int[5];       //int타입의 값 5개를 저장할 수 있는 배열 생성

5.1.3 배열의 인덱스

  • 배열의 요소 : 생성된 배열의 각 저장공간
  • 배열의 인덱스 : 각 요소에 자동으로 붙는 일련번호
    • 인덱스의 범위는 0부터 배열길이 -1까지

  • 배열에 값을 저장하고 읽어오는 방법
score[3] = 100;       //배열 score의 4번째 요소에 100을 저장한다.
int value = score[3]; //배열 score의 4번째 요소에 저장된 값을 읽어서 value에 저장
  • for문 이용해보기
score[0] = 0;
score[1] = 10;
score[2] = 20;
score[3] = 30;
score[4] = 40;

   ⬇
for (int i = 0; i < 5; i++){
	score[i] = 1 * 10;
}

배열의 길이

  • int 범위의 양의 정수(0포함)

배열이름.length → int형 상수

why? 배열은 한번 생성하면 길이를 변경할 수 없다.

→ 값을 읽을 수만 있을 뿐 변경할 수 없다.

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

//arr.length의 값은 5이고, tmp에 5가 저장된다.
int tmp = arr.length;

//길이 변경시 에러뜸
int[] arr = new int[5];
arr.length = 10;         //에러. 길이변경x
  • for문의 조건식에서 배열의 길이를 직접 적어주는 것보다 ‘배열이름.length’를 사용하는 것이 좋다.
  • ‘배열이름.length’는 배열의 길이가변경되면 자동적으로 변경된 배열의 길이를 값으로 찾기 때문에 조건을 일일이 변경하지 않아도 된다.
    • 코드 관리 쉽고, 에러 발색할 확률 낮아짐.
int[] score = new int[5];
for (int i = 0; i < score.length; i++){
	System.out.println(score[i]);
}

 

배열의 길이 변경하기

배열에 저장할 공간이 부족한 경우에는 어떻게 해결?

  1. 더 큰 배열을 새로 생성
  2. 기존 배열의 내용을 새로운 배열에 복사
  • 애초에 배열의 길이를 넉넉하게 잡아 새로운 배열을 생성할 상황을 적게 발생하게 해야함.
  • 배열의 길이를 너무 크게 잡으면 메모리를 낭비하게 됨.
  • 기존의 2배정도의 길이로 생성하는 것이 좋다.

5.1.4 배열의 초기화

배열의 각 요소에 처음으로 값을 저장하는 것

for문으로 배열을 초기화 하려면?

저장하려는 값에 일정한 규칙이 있어야 가능

//보편적인 방법
int[] score = {50, 60, 70};

//new int[] 생략 가능
int[] score = new int[] = {50, 60, 70};

for문으로 배열을 초기화 하려면?

저장하려는 값에 일정한 규칙이 있어야 가능

//보편적인 방법
int[] score = {50, 60, 70};

//new int[] 생략 가능
int[] score = new int[] = {50, 60, 70};

배열의 출력

Arrays.toString(배열이름)

int[] iArrr = {100, 95, 80, 70, 60};

for(int i = 0; i < iArr.length; i++);{
	System.out.print(iArr[i]);
}

---------------------------------------------

int[] iArrr = {100, 95, 80, 70, 60};
System.out.println(Arrays.toString(iArr));

//for문의 출력값과 toString의 출력값이 같음
//{100, 95, 80, 70, 60}이 출력 됨

배열의 복사

System.arraycopy()

  • arrycopy()는 지정된 범위의 값들을 한 번에 통째로 복사
  • for문은 배열의 요소 하나하나에 접근해서 복사
  • for문보다 arraycopy()를 사용하는게 효율적

 


String 배열

5.2.1 String 배열의 선언과 생성

  • 여러개의 문자열을 저장 할 수 있는 배열

  • 3개의 String 타입의 참조변수를 저장하기 위한 공간이 마련되고 참조형 변수의 기본값은 null이므로 각 요소의 값은 null로 초기화

5.2.3 char 배열과 String 클래스

  1. String 클래스 = char[] + method(기능)
  2. String 클래스는 내용을 변경할 수 없다. = read only

다차원 배열

5.3.1 다차원 배열

2차원 배열

  • 테이블 형태의 데이터를 저장하기 위한 배열
  • 선언방법
타입[][] 변수이름;
int[][] score;

2차원 배열의 index

  • 배열이름[행index][열index]
int[][] score = new int[4][3]
//4행 3열의 2차원 배열 score를 생성

for문을 이용해 2차원 배열을 초기화

//2차원 배열 s의 모든 요소를 10으로 초기화
for (int i=0; i < s.length; i++){
		for(int j=0; j < s.length; j++){
				s[i][j] = 10;

Array로 배열 다루기

배열의 비교와 출력

  • equals()
String[][] str2 = new String[][]{{"aaa", "bbb"},{"AAA", "BBB"}};
String[][] str22 = new String[][]{{"aaa", "bbb"},{"AAA", "BBB"}};

System.out.println(Arrays.equals(str2, str22));      //false
System.out.println(Arrays.deepEquals(str2, str22));  //true
  • toString()
//1차원 배열
int[] arr = {0, 1, 2, 3}
System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3]

//2차원 배열
int[][] arr2 = {{11, 12}, {22, 23}};
System.out.println(Arrays.deepToString(arr2));  //[[11, 12], [21,,22]

배열의 복사

  • copyOf()
int[] arr = {0, 1, 2, 3, 4};

//copyOf(복사할 배열, 복사할 요소의 갯수);
int[] arr2 = Arrays.copyOf(arr, arr.length);  //arr2 = [0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 3);           //arr3 = [0, 1, 2]
int[] arr4 = Arrays.copyOf(arr, 7);           //arr4 = [0, 1, 2, 3, 4, 0, 0]
  • copyOfRange()
//copyOfRange(arr, from, to)
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);   //arr5 = [2, 3] <-4불포함
int[] arr6 = Arrays.copyOfRange(arr, 2, 7);   //arr6 = [0, 1, 2, 3, 4, 0, 0] <-4불포함

배열의 정렬

  • sort()
int[] arr = {3, 2, 0, 1, 4};
Arrays.sort(arr);   //배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr));  //[0, 1, 2, 3,4]

 

 

 

 

//JAVA의 정석