230718

배열

배열 (Array)


Java배열6

배열이란?

  • 같은 종류의 데이터를 저장하기 위한 자료구조
  • 크기가 고정되어 있음 (한번 생성된 배열은 크기를 바꿀 수 없음)
  • 배열을 객체로 취급 (참조형)
  • 배열의 요소를 참조하려면 배열 이름과 색인 (Index) 이라고 하는 음이 아닌 정수 값을 조합하여 사용 (파이썬처럼 마이너스로 접근하지 못함)
  • index 번호를 가지고 각 요소에 접근
  • index 번호는0부터 시작
  • 배열이름.length를 통해 배열의 길이 조회 가능
  • 배열의 길이는 임의로 변경 불갛마
  • 길이 변경 필요시 새로운 배열을 생성 후 내용을 옮긴다

배열의 선언

아래 두 가지 방식 중 하나로 가능하다

  • 타입 [] 변수 요것을 조금 더 권장
  • 타입 변수 []
타입배열 이름선언
intiArrint[] iArr;
charcArrchar[] cArr;
booleanbArrboolean[] bArr;
StringstrArrString[] strArr;
DatedateArrDate[] dateArr;

배열의 생성과 초기화

자료형[] 배열이름 = new자료형[길이]; //배열 생성(자료형의 초기값으로 초기화)
자료형[] 배열이름 = new 자료형[] {값1, 값2, 값3, 값4}; //배열 생성 및 값 초기화
자료형[] 배열이름 = {값1, 값2, 값3, 값4}; //선언과 동시에 초기화

int[] score1;
int score2[];
int[] score3 = new int[5];
int[] score4 = new int[] {1, 2, 3, 4};
int[] score5 = {1, ,2  3, 4,};//이 방법은 약간의 제약 사항이 이씀

score3 = new int[6];
score3 = new int[] {1, 2, 3, 4, 5];
score3 = {1, 2, 3, 4, 5}; // 오류 난다

길이 부분에 아무것도 적지 않으면 이슈 발생!!

자료형기본값비고
booleanfalse 
char\u0000공백문자
byte, short, int0 
long0L 
float0.0f 
double0.0 
참조형 변수null아무것도 참조하지 않음

배열의 메모리 생성 과정

int[] nums  = new int[3];

배열의 순회

**********************************반복문으로 배열 순회하기 (index)**********************************

  • 반복문을 이용하여 배열의 요소를 순회할 수 있음
int intArray[] = {1, 3, 5, 7, 9};
for (int i=0; i <intArray.length; i++) {
    System.out.println(intArray[i]);
}

********************배열 요소에 직접 접근하여 순회하기 for-each 구문**

  • 가독성이 개선된 반복문, 배열 및 collections에서 사용 가능
  • index 대신 직접 요소 (elements)에 접근하는 변수를 제공
  • naturally ready only (copied value)
int intArray[] = {1, 3, 5, 7, 9};
for (int x: intArray) //intArray에 들어있는 x 값에 대하여 {
    System.out.println(x);
}

배열의 출력

  • 반복문을 이용해서 출력
  • Arrays.toString(배열): 배열 안의 요소를 [값1, 값2, …] 형태로 출력

배열의 복사

  • 배열은 생성하면 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 큰 배열을 생성하고 이전 배열의 값을 복사해야 함

Java배열1

새로운 배열 = Arrays.copyOf(복사하고 싶은 배열, 새로운 배열의 크기)
System.arraycopy(Object src, intsrcPos, Object dest, int destPos, int length)

배열 실습 문제

  • 최대값, 최소값 찾기
  • int[] intArray = {3, 27, 13, 8, 235, 7, 22, 9, 435, 31, 54}; int min = 1000; // min = Integer.MAX_VALUE; integer가 가질 수 있는 가장 큰 값 // 초기화 방법은 여러가지가 있을 수 있음! 배열에 어떤 범위의 값이 들어가는지에 따라서 달라질 수도 있음 int max = 0; for (int num: intArray) { if (num > max) { max = num; ] if (num < min) { min = num; } } System.out.printf("min: %d, max: %d%n", min, max);
  • 빈도수 구하기
  • int[] intArray = {3, 7, 2, 5, 7, 7, 9, 2, 8, 1, 1, 5, 3}; int[] used = new int[10]; for (int num:intArray) { used[num]++; } System.out.println(Arrays.toString(used));

다차원 배열 Multidimensional Array


다차원 배열이란?

  • 2차원 이상의 배열을 의미
  • 배열 요소로 또 다른 배열을 가지는 배열
  • 2차원 배열은 배열 요소로 1차원 배열의 참조를 가지는 배열
  • 3차원 배열은 배열 요소로 2차원 배열의 참조를 가지는 배열

2차원 배열 선언

int [][] iArr
int iArr[][]
int[] iArr[]

2차원 배열 생성

배열의 이름 = new 배열유형[1차원 배열개수][1차원 배열의 크기];
배열의 이름 = new 배열유형[1차원 배열개수][];

Java배열2

int[][] scores = new int[3][];

Java배열3

2차원 배열 메모리

int a = 10;
int [] arr = new int [4];
int [][] arr2 = new int[2][];
arr2[0] = new int [3];
arr2[1] = new int [10];
arr2[1][1] = 100;

2차원 배열 탐색

Java배열4Java배열5