JAVA/이론 정리 및 예제

[JAVA/자바] #4_2 배열 / 예제

chaewon 2021. 9. 14. 14:23

변수 값 변경

// 변수의 두 값 변경하기
int num1 = 10;
int num2 = 20;

System.out.println("num1 : " + num1);     //10
System.out.println("num2 : " + num2);     //20

int temp;
temp = num1;
num1 = num2;
num2 = temp;

System.out.println("num1 : " + num1);     //20
System.out.println("num2 : " + num2);     //10

순차정렬

  • 순차정렬이란 정렬 알고리즘에서 가장 간단하고 기본이 되는 알고리즘으로
    배열의 처음과 끝을 탐색하면서 차순대로 정렬하는 가장 기초적인 알고리즘이다.
  • 처음부터 해당 인덱스 전까지 값을 비교하여 정렬하는 방식.
arr[0] [1] [2] [3] [4]
3 1 5 4 2
//오름차순 정렬
//인덱스를 한 개씩 증가시키는 반복문
for(int i = 1; i < iarr.length; i++) {
		//인덱스가 증가할 때마다 처음부터 해당 인덱스 전까지 값을 비교하는 반복문
		for(int j = 0; j < i; j++) {
				//오름차순 정렬을 위한 처리
				//내림차순은 부호만 반대로 바꾸면 됨
				if(iarr[i] < iarr[j]) {      //기준인덱스 < 비교인덱스
						int temp;
						temp = iarr[i];
						iarr[i] = iarr[j];
						iarr[j] = temp;
				}
		}
}
for(int i = 0; i < iarr.length; i++) {
		if(i < iarr.length - 1) {
				System.out.print(iarr[i] + ", ");
		}else {
				System.out.print(iarr[i]);
		}
}

 

배열 - 얕은 복사

  • 배열의 주소만 복사한다.
  • 원본배열에 영향을 끼침
//얕은 복사는 배열의 주소만 복사한다.
int[] originArr = {1, 2, 3, 4, 5};     //stack에 있는 변수
int[] copyArr = originArr;             //변수의 주소값만 복사해서 대입

originArr[0] = 99;

// 값 변경 후 출력
// originArr : 99, 2, 3, 4, 5
// copyArr : 99, 2, 3, 4, 5

//hashCode를 출력 해보면 같은 주소값의 키 값을 가진다.
System.out.println("originArr의 hashCode() : " + originArr.hashCode());
System.out.println("copyArr의 hashCode() : " + copyArr.hashCode());
---------------------------------------------> 레퍼런스 주소만 복사
Stack heap static
int[]
[ 0x1234 ]originArr

int[]
[ 0x1234 ]copyArr
0x1234
[ 1 | 2 | 3 | 4 | 5 ]
 99
 

 

배열 - 깊은 복사

  • 동일한 새로운 배열을 하나 생성하고 값을 복사하는 것
  • 원본배열에 영향을 끼치지 않음
//깊은 복사는 동일한 새로운 배열을 하나 생성하고 값을 복사하는 것이다.
int[] originArr = {1, 2, 3, 4, 5};
int[] copyArr = new int[5];

//for문을 이용하여 값을 1:1 복사한다.
for(int i = 0 ; i < originArr.length; i++) {
		copyArr[i] = originArr[i];
}

originArr[0] = 99;

// 값 변경 후 출력
// originArr : 1, 2, 3, 4, 5
// copyArr : 99, 2, 3, 4, 5

//hashCode를 출력 해보면 다른 주소값의 키 값을 가진다.
System.out.println("originArr의 hashCode() : " + originArr.hashCode());
System.out.println("copyArr의 hashCode() : " + copyArr.hashCode());
---------------------------------------------> 레퍼런스 주소를 가지고 있는 것도 복사
Stack heap static
int[]
[ 0x1234 ]originArr

int[]
[ 0x5678 ]copyArr
0x1234
[ 1 | 2 | 3 | 4 | 5 ]

0x5678
[ 1 | 2 | 3 | 4 | 5 ]
 99
 

 

값 1:1 대입 (배열 복사) 방법

  • for문을 이용한 배열 복사
  • arraycopy()를 이용한 배열 복사
    System.arraycopy(원본배열, 복사를시작할인덱스, 복사할배열, 복사를시작할인덱스, 복사할길이);
  • clone()을 이용한 복사
    copyArr = originArr.clone();
    • 복사본 배열이 미리 할당되어 있는 경우 기존 배열을 버리고 복사한 새로운 배열을 참조한다.