[Java] 자바 #35, 배열 관련 라이브러리 및 Array클래스의 활용
- 프로그래밍 언어/Java
- 2019. 3. 4. 20:47
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차원 이상);
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #37, Set 계열 컬렉션(HashSet, TreeSet) (0) | 2019.03.06 |
---|---|
[Java] 자바 #36, Iterator 반복자 (0) | 2019.03.05 |
[Java] 자바 #34, List 인터페이스 계열 컬렉션(ArrayList, LinkedList, Vector) & ArrayList vs LinkedList 예제 (0) | 2019.03.04 |
[Java] 자바 #33, 컬렉션의 종류와 인터페이스(List, Map, Set) (0) | 2019.03.03 |
[Java] 자바 #32, Stack, Queue 개념 및 기능 (6) | 2019.03.01 |