배열
- 연속된 공간에 값을 나열시키고 각 값에 인덱스를 부여해 놓은 자료구조이다.
- 같은 타입의 값만 관리한다.
- 선언된 배열의 길이는 늘리거나 줄일 수 없다.
배열은 참조변수이다.
ex)
int[] arr = new int[4];
=> 배열을 생성하면, Heap 영역에 할당된다.
Heap 영역에 생성된 해당 객체(배열)의 번지는 메소드 영역(Method Area)과 스택영역(Stack Area)의 상수(Constant)와 변수에서 참조할 수있다.
* 얕은 복사(Shallow Copy)
하나의 객체를 두 레퍼런스가 참조하도록 객체의 '주소'를 복사하는 것.
※ 얕은 복사를 통해 복사한 객체의 값이 변경된다면, 기존의 객체도 변경됩니다.
* 참조값이 아닌 실제값을 복사해야하는 경우에는 깊은 복사가 필요합니다.
* 깊은 복사(Deep Copy)
새로운 배열 객체를 생성하여 기본 배열의 데이터를 복사하는 것.
1) 복사생성자 또는 복사팩터리를 이용하여 복사
2) 직접 객체를 생성하여 복사 (복사 생성자)
3) Cloneable을 구현하여 clone()재정의
배열 생성
- 타입[] 변수 = new 타입[생성될 배열의 길이];
- 타입[] 변수;
배열 길이
배열에 저장할 수 있는 항목의 수를 말함.
배열의 길이를 얻으려면 .length 사용
배열 길이는 주로 for문을 사용해서 전체 배열항목을 반복할 때 사용된다.
배열 합치기
int[] iArr = {1,3,5,7,9};
int[] iArr2 = {2,4,6,8,10};
// 두 배열의 값을 합쳐주세요.
int[]iArr3 = new int[iArr.length+iArr2.length]; // 합친 값을 저장할 배열 생성
// iArr3에 iArr의 0번 인덱스부터 마지막 인덱스까지 차례로 넣기
for(int i=0; i < (iArr3.length - iArr.length); i++) {
iArr3[i] = iArr[i];
} System.out.println(Arrays.toString(iArr3)); // 확인
// iArr3의 iArr2의 넣기
for(int i=iArr.length+1; i < (iArr3.length); i++) { // i는 iArr 인덱스 개수 + 1 부터 iArr3의 인덱스 개수 까지 1씩증가
iArr3[i] = iArr2[i-iArr.length]; // iArr3[i] => iArr3[6] | iArr2[i-Arr.length] => iArr2[6-1]
}System.out.println(Arrays.toString(iArr3));
*for문 잘쓰는게 더 중요한듯 하다.
다차원 배열
- n차원 배열은 n-1차원 배열을 여러개 보관하는 배열이다.
- 표현방식
int[][] 변수명; => 권장
int[] 변수명[];
int 변수명[][];
예제)
배열 자르기.
배열 지우기.
원하는 인덱스1 부터 인덱스 2까지의 값 출력하기