🗄️ Backend/Java

자바(Java) - 배열과 문자열 (3) 배열

kongmi 2023. 1. 9. 18:08

버블정렬

 1차원 배열을 이용한 버블 정렬 : 가장 비효율적이지만 구현하기 쉬운 정렬 방식
package 버블정렬0109;

public class ArrayBubbleSort {
    public static void main(String[] args) {
        int[] arr = {9,24,13,10,5,78,7,6,2,11};
        int tmp = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = i; j < arr.length; j++) {
                if(arr[i] > arr[j]) {
                    tmp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = tmp;
                }
            }
        }
        for (int e : arr) System.out.print(e + " ");
    }
}

 

2차원 배열

package 중첩Array0109;

public class DoubleArrayEx {
    public static void main(String[] args) {
        int[][] arr = new int[2][3]; // 2행 3열
        int k = 10;
        for(int i = 0; i < arr.length; i++) { // 행의 갯수를 알 수 있음
            for(int j = 0; j < arr[i].length; j++) { // 열의 갯수
                arr[i][j] = k;
                k += 10;
            }
        }
        // 전통적인 for문
        for(int i = 0; i < arr.length; i++) {
            for(int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
        // 향상된 for문
        for(int[] row : arr) {
            for(int e : row) System.out.print(e + " ");
            System.out.println();
        }
    }
}

int[][] arr = new int[2][4];

배열의 복사

System.arraycopy() : 배열값을 복사할 때 사용
package 배열의활용0109;
import java.util.Arrays;

public class ArrayApply {
    public static void main(String[] args) {
        int[] arr1 = {90,45,77,80,55}; // 원본 데이터
        int len = 10;
        int[] arr2 = new int[len];
        for(int i = 0; i < arr1.length; i++) {
            arr2[i] = arr1[i];
        }
       System.arraycopy(arr1, 0, arr2, 4, arr1.length);
    }
}
Arrays.copyOf() : 배열을 원하는 길이 만큼 새로운 배열로 복사
package 배열의활용0109;
import java.util.Arrays;

public class ArrayApply {
    public static void main(String[] args) {
        int[] arr1 = {90,45,77,80,55}; // 원본 데이터
        int[] arr3 = Arrays.copyOf(arr1, 10);
        System.out.println(Arrays.toString(arr3));
    }
}
깊은 복사 : 할당된 메모리 공간에 실제 값이 복사 되는 것(기본 타입 모두 여기에 해당함)
얕은 복사 : 참조 타입에 해당되며 실제 값이 복사가 되는 것이 아니라 주소가 복사되는 것을 의미

따라서, 참조 타입의 경우 실제 값을 복사하려면 위의 배열의 복사 방법을 이용하면 된다.

package 깊은복사얕은복사0109;
import java.util.Arrays;

public class DeepCopy {
    public static void main(String[] args) {
        // 깊은 복사
        int x = 100;
        int y;
        y = x;
        x = 200;
        System.out.println(y);

        // 얕은 복사가 발생하는 경우
        int[] arr1 = new int[4];
        arr1[0] = 100;
        int[] arr2 = arr1; // 얕은 복사가 일어남
        arr1[0] = 300;
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
    }
}