본문 바로가기

Backend/Data Structure

2. Array 클래스

 

 

 

Array

배열은 여러개의 데이터를 저장할 수 있는 자료 구조로, 순서를 나타내는 정수형 배열 첨자를 사용해서 데이터에 액세스 할 수 있음. 자바 배열은 한번 크기가 정해지면 크기를 변경할 수 없다.

 

 

 

특징

  • 여러 개의 값을 관리할 수 있습니다.
  • 배열은 하나의 공간을 갖게되고, 그 공간에 값이 직접 들어가는 것이 아니라, 값이 들어있는 다른공간의 위치를 알려준다 (참조형)
  • 배열은 다 똑같은 타입의 값만 받을 수 있고, 어떠한 형태의 값을 받는지는 선언을 할 때 지정한다.
  • 배열은 객체이므로 변수만 선언할 경우 실체 객체가 없으므로 값은 null이다. 

 

선언

  • 타입[] 배열이름;
  • 타입 배열이름[];
  • 크기를 지정하지 않은 null 배열;
int[] grade1 = new int[3]; // 길이가 3인 int형 배열의 선언 및 생성
int grade2[] = new int[3]; // 길이가 3인 int형 배열의 선언 및 생성
int[] grade3; // int 형 null 배열

 

 

배열의 초기화

배열의 타입 초기 값
char '\u0000'
byte, short, int 0
long 0L
float 0.0F
double 0.0 또는 0.0D
boolean false
배열, 인스턴스 등 null

 

int[] grade1 = {70, 90, 80};          // 배열의 선언과 동시에 초기화할 수 있음.

int[] grade2 = new int[]{70, 90, 80}; // 배열의 선언과 동시에 초기화할 수 있음.

int[] grade3;

// grade3 = {70, 90, 80};             // 이미 선언된 배열을 이 방법으로 초기화하면 오류가 발생함.

int[] grade4;

grade4 = new int[]{70, 90, 80};       // 이미 선언된 배열은 이 방법으로만 초기화할 수 있음.

 

 

배열에 요소 삽입

  • 하나씩 삽입
grade1[0] = 85; 
grade1[1] = 65;
grade1[2] = 90;
  • 반복문으로 삽입
for (int i = 0; i < grade1.length; i++) {
    grade[i]=i; // grade1.length 가 3이라면 grade[0]=0, grade[1]=1, grade[2]=2
}

 

 

 

배열의 요소 확인

int[] gragde1 = {1, 2, 3};
for (int i=0; i<grade1.length; i++) {
     System.out.println(grade[i]);   //1, 2, 3 이 한줄씩 출력
}
  • 기존 for문
    -for(int i=0; i<배열의 길이; i++)
int[] gragde1 = {1, 2, 3};
for (int val : grade1) {
     System.out.println(val);   //1, 2, 3 이 한줄씩 출력
}
  • 향상된 for문 (1.5버전부터 가능)
    - for( 배열의 요소값 : 반복대상 배열명)
int[] gragde1 = {1, 2, 3};
System.out.println(Arrays.toString(grade1)); // {1,2,3} 
  • toString()

 

 

 

ArrayIndexOutOfBounds

grade1.length이 3이라고 할 때 

grade1[-1] 또는 grade1[10] 처럼 사용하면 ArrayIndexOutOfBoundsException 이 발생한다. 보통 for문(반복문)에서 부등호를 사용해서 배열 범위를 다루게 되는데 실수로 1씩 범위를 넘거나, 적게 사용해서 발생하는 에러(는 내가 맨날 하는 실수)Off-by-one error 라고 한다.

 

 

 

배열 유틸리티 클래스 - Arrays

객체를 사용하기 위해서는 import 해야 함 (import java.util.Arrays;)

	import java.util.Arrays;		
        
        	int [] grade1 = new int [3];
		grade1[0] = 3;
		grade1[1] = 5;
		grade1[2] = 1; 
		// grade1 = {3,5,1}
		
		Arrays.sort(grade1);
		//grade1 = {1,3,5}
		
		Arrays.fill(grade1, 10);
		//grade1 = {10, 10, 10}
		
		int [] grade2 = Arrays.copyOf(grade1, 10);
		//grade2 = {10, 10, 10, 0, 0, 0, 0, 0, 0, 0} 
		
		//출력을 위해 toString 
		System.out.println(Arrays.toString(grade2));
  • fill : 배열을 단일 값으로 채울때 사용
  • sort : 배열을 정렬 (오름차순)
  • copyOf(배열 변수 이름, 새로운 배열의 길이): 배열을 복사 새 배열의 길이가 원본보다 짧으면 잘리고 복사되고, 원본보다 길면 다 복사되고 나머지는 배열의 타입에 따라 0, false, 또는 null 로 채워짐

 


참고:


https://offbyone.tistory.com/192 [쉬고 싶은 개발자]

 

velog.io/@yoop/%EC%9E%90%EB%B0%94%EC%9D%98-%EB%B0%B0%EC%97%B4www.tcpschool.com/java/java_array_oneDimensional

'Backend > Data Structure' 카테고리의 다른 글

3. Collection Framework  (0) 2020.11.20
1. Stack 클래스  (0) 2020.11.14