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 |