변수들의 나열, 묶음
인덱스(index) 번호를 이용하여 관리배열 공간에 대한 참조값을 저장할 수 있는 참조형 변수 선언
실제 데이터를 저장할 수 있는 메모리 공간을 생성
arr = new int[3];
System.out.println(arr);
➡ [I@59f95c5d //배열변수명 출력시 참조값의 주소 출력
int[] arr = new int[5]; //배열의 선언과 생성
for(int i=0; int<5; i++) {
System.out.println(arr[i]);
}
➡ [0] 5개 출력
배열의 선언과 생성 및 초기화를 동시에 할 수 있음
int[] arr = new int[3]
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
👇🏻
int[] arr = {1, 2, 3};
----------------------------
<char형 배열>
char[] chArr = {'a', 'p', 'p', 'l', 'e'};
<double형 배열>
double[] dArr = {1.1, 2.2, 3.3};
<boolean형 배열>
boolean[] bArr = {true, true, false, false};
arr = {5, 6}; ❌
for(int i=0; i<5; i++) {
arr[i] = i+1;
}
➡ 배열의 요소에 1~5까지 하나씩 대입
for(int i=0; i<5; i++) {
System.out.println(arr[i]);
}
➡ 1~5까지 순서대로 출력
배열의 길이(크기), 요소의 개수 출력 👉🏻 int형으로 출력
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
문자열은 내부 데이터 처리로 char[](문자의 배열)로 구현됨
String str = "Apple Banana";
👉🏻 char[] strArr = {'A', 'p', 'p', 'l', 'e', ' ', 'B', 'a', 'n', 'a', 'n', 'a' };
String[] strArr = {"Apple", "Banana", "Cherry"};
for(int i=0; i<strArr.length; i++) {
System.out.println(strArr[i]); //배열의 요소 하나씩 출력
System.out.println(strArr.length); //배열의 길이 출력
System.out.println(strArr[i].length()); //배열 요소의 길이 출력
}
참조대상의 참조값(주소)만 복사되는 현상 👉🏻 실 데이터를 저장하고 있는 내부공간은 복사되지 않음
int[] arr1 = {10, 20, 30};
int[] arr2;
arr2 = arr1; //arr1의 데이터가 아닌 주소를 복사
System.out.println(arr1);
System.out.println(arr2);
➡ [I@59f95c5d / 같은 주소값 출력
arr2[1] = 999;
for(int i=0; i<arr2.length; i++) {
System.out.println( arr1[i] + " : " + arr2[i] );
}
➡ 10 : 10 / 999 : 999 / 30 : 30
참조대상의 내용물을 새로운 공간에 복사 👉🏻 원본데이터와 사본데이터가 분리된 공간을 가짐
int[] arr1 = {10, 20, 30}; //원본, Source
int[] arr2; //사본, Destination
//arr1의 길이(요소의 갯수)만큼 arr2의 변수공간 생성
arr2 = new int[arr1.length];
//데이터의 요소 복사
for(int i=0; i<arr2.length; i++) {
arr2[i] = arr1[i]; //사본데이터 ⬅ 원본데이터
}
//출력 확인
arr2[1] = 999; //arr2[1]의 요소만 변경됨
for(int i=0; i<arr2.length; i++) {
System.out.println( arr1[i] + " : " + arr2[i] );
}
➡ 10 : 10 / 20 : 999 / 30 : 30
System.arraycopy( src , srcPos , dest , destPos , length )int[] arr1 = {10, 20, 30}; //원본, Source
int[] arr2; //사본, Destination
//arr1의 길이(요소의 갯수)만큼 arr2의 변수공간 생성
arr2 = new int[arr1.length];
//데이터의 요소 복사
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
//출력 확인
arr2[1] = 999; //arr2[1]의 요소만 변경됨
for(int i=0; i<arr2.length; i++) {
System.out.println( arr1[i] + " : " + arr2[i] );
}
➡ 10 : 10 / 20 : 999 / 30 : 30
int num1 = 11;
int num2 = 22;
<오류>
num2 = num1; //num2에 num1 값을 대입하면서 둘이 같은 값을 가지게 됨
num1 = num2;
➡ num1 = 11, num2 = 11
<정답>
int tmp; //값을 옮겨둘 임시 저장소 생성
tmp = num1; //tmp 11, num1 11
num1 = num2; //num1 22, num2 22
num2 = tmp; //num2 11, num1 22
➡ num1 = 22, num2 = 11
arr[0]과 arr[1]을 서로 비교해서 두 값 중 왼쪽이 크면 서로 교환
👉🏻 큰 값을 오른쪽으로 이동시켜 오름차순으로 정렬
📄 example
int[ ] arr = {3, 2, 5, 4, 1}{3, 2, 5, 4, 1} ➡
3,2를 비교,3이 크므로 위치 교환
{2, 3, 5, 4, 1} ➡ 옮겨진 값과 다음값3과5를 비교,5가 크므로 환하지 않고 다음 오른쪽 값 비교
{2, 3, 5, 4, 1} ➡5와4를 비교,5가 크므로 위치 교환
{2, 3, 4, 5, 1} ➡5와1을 비교,5가 크므로 위치 교환
{2, 3, 4, 1, 5}
👉🏻5는 종단점에 도착했으므로 비교를 멈추고 계산에서 제외됨. 1회기 끝... 반복 ...
{2, 3, 1, (4, 5)}
... 반복 ...
{(1, 2, 3, 4, 5)}