[Java] 자바 #35, 배열 관련 라이브러리 및 Array클래스의 활용

Array 클래스 

- 개발자가 생성하는 모든 배열의 부모클래스가 된다.

객체 멤버 : nums.XXX : clone(), length

정적 멤버 : Array.XXX : 주로 변환. 네트워크 작업.

유틸 멤버 : Arrays.XXX : 배열 관련 여러가지 제공(컬렉션처럼)


ex)

int[] nums = { 100, 200, 300, 400, 500, 600 };

String[] names = { "홍길동", "길라임", "최강치", "하하하", "아무개" };


// 덤프기능

System.out.println(nums.toString());     //[I@15db9742

System.out.println(names.toString());    //[Ljava.lang.String;@6d06d69c

System.out.println(Arrays.toString(names));  //[홍길동, 길라임, 최강치, 하하하, 아무개]  얘만 이렇게 덤프되서 나온다. 다른건 주소값 나옴.


int[][] nums2 = { { 100, 200, 300 }, { 400, 500, 600 } };

System.out.println(Arrays.toString(nums2));  //[[I@7852e922, [I@4e25154f]  2차원 이상의 배열은 또 안됨. 그안에 배열이 있어서 그 배열의 주소를 보여주는 것임.


for (int i = 0; i < nums2.length; i++) {

System.out.println(Arrays.toString(nums2[i]));  //이런식으로밖에 해결 못함.

}


순수배열에서의 사용


int[] nums = new int[10];


// 모든 방에 숫자 100으로 채워라

Arrays.fill(nums, 100);


String[] names = new String[10];

Arrays.fill(names, "익뇽");



1. 배열 복사

int[] origin = { 100, 200, 300, 400, 500 };

int[] copy1 = origin;// 얕은 복사. -> 원본이나 복사본 둘중 하나 건들면 다 바뀐다.


copy1[0] = 100000;


System.out.println(origin[0]);

System.out.println(copy1[0]);


깊은 복사 -> 동일한 크기의 배열생성 -> 각 방을 1:1로 복사.

 1.객체메소드

 2.정적메소드

int[] copy2 = origin.clone();   // 깊은복사 메소드. ( 즉, 1대1로 복사해줌)

copy2[0] = 200000;

System.out.println(Arrays.toString(copy2));

System.out.println(Arrays.toString(origin));


Arrays -> copyOf메소드는 clone메소드의 버전업된 메소드.

copyOf => 처음 ~ 원하는 길이

copyOfRange => 원하는위치~원하는 위치


int[] copy3 = Arrays.copyOf(origin, origin.length);

System.out.println(Arrays.toString(copy3));


// 원본보다 긴 길이로 복사

int[] copy4 = Arrays.copyOf(origin, 10);

System.out.println(Arrays.toString(copy4));


int[] copy5 = Arrays.copyOf(origin, 3);

System.out.println(Arrays.toString(copy5));


int[] copy6 = Arrays.copyOfRange(origin, 2, 4);

System.out.println(Arrays.toString(copy6));


2. 배열 비교


int[] nums1 = { 100, 200, 300 };

int[] nums2 = nums1;

int[] nums3 = nums1.clone();

System.out.println(nums1 == nums2);

System.out.println(nums1 == nums3);

System.out.println();


// 깊은 비교

// - 참조 주소 비교(X) -> 각 배열의 요소의 들을 비교

System.out.println(Arrays.equals(nums1, nums2));

System.out.println(Arrays.equals(nums1, nums3));

System.out.println();


// 깊은 비교

String[][] name1 = { { "홍길동", "아무개", "테스트" }, { "하하하", "호호호", "후후후" } };

String[][] name2 = { { "홍길동", "아무개", "테스트" }, { "하하하", "호호호", "후후후" } };


System.out.println(name1 == name2); // 얕은 비교 -> 다른애

System.out.println(Arrays.equals(name1, name2)); // 깊은비교(1차원 비교)

System.out.println(Arrays.deepEquals(name1, name2)); // 더욱..깊은비교(2차원 이상);

댓글

Designed by JB FACTORY