Java

[JAVA]배열2(Arrays)

TreeBomb 2023. 12. 1. 14:35

Arrays란?

- Arrays클래스는 배열의 복사, 정렬, 검색 등 배열을 다루기 위한

  다양한 메서드를 제공하고 있다.

Arrays 사용법

Arrays.함수명();

 

배열의 출력

Arrays.toString(배열명); 

Integer[] arr2 = {1,6,2,3,10,7,4,5,8,9};
Arrays.sort(arr2,Comparator.reverseOrder());
System.out.println(Arrays.toString(arr2));

결과

[1, 6, 2, 3, 10, 7, 4, 5, 8, 9]

for문 없이 한 번에 출력이 가능한 함수이다.

 

배열의 정렬

Arrays.sort(배열명);

System.out.println("정렬 전 :" + Arrays.toString(arr));
Arrays.sort(arr);
System.out.println("정렬 후 : " + Arrays.toString(arr));

결과

정렬 전 :[1, 6, 2, 3, 10, 7, 4, 5, 8, 9]
정렬 후 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

내림차순 정렬

내림차순 정렬은 조금 복잡할 수도 있다.

Arrays.sort(배열명,Comparator.reverseOrder());

내림차순 정렬을 하려면 선언할 때 기본 자료형의 클래스타입인 Wrapper클래스가 필요하다.

기본 자료형 Wrapper
int Integer
char Character
float Float
double Double

Wrapper 자료형을 사용해야 쓸 수 있다.

Integer[] arr2 = {1,6,2,3,10,7,4,5,8,9};
Arrays.sort(arr2,Comparator.reverseOrder());
System.out.println(Arrays.toString(arr2));

결과

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

 

 

배열의 복사

자바에서 배열은 한 번 생성하면 그 길이를 변경할 수 없어서

더 많은 데이터를 저장하거나 기존의 배열과 똑같은 배열을 만들려면 배열을 복사해야 한다.

 

복사의 종류

- 얕은 복사(Shallow Copy) : 주소를 공유하기 때문에 복사된 배열이나 원본 배열이 

- 깊은 복사(Deep Copy) : 복사된 배열이나 원본 배열이나 서로 간의 간섭이 없다.

 

얕은 복사

int[] arr01 = {1,2,3};
int[] arr02 = arr01;
System.out.println("arr02배열 : " + Arrays.toString(arr02));

System.out.println("복사된 배열 값 바꾸고 원본 배열 확인해보기");
arr02[1] = 10;		
System.out.println("arr01배열 : " + Arrays.toString(arr01));
System.out.println("arr02배열 : " + Arrays.toString(arr02));

결과

arr02배열 : [1, 2, 3]
복사된 배열 값 바꾸고 원본 배열 확인해보기
arr01배열 : [1, 10, 3]
arr02배열 : [1, 10, 3]

arr02의 값만 바꿨는데 arr01의 값도 바뀌는 것을 확인할 수 있다.

 

깊은 복사

깊은 복사는 방법이 두 가지이다.

반복문을 통해 직접 하나하나 복사하는 것과

Arrays클래스의 함수를 이용하면 된다.

int[] cards = {1,6,4,5,3,2};
int[] new_cards = new int[cards.length];

//반복문을 이용한 깊은 복사
for(int i = 0; i < cards.length;i++) {
	new_cards[i] = cards[i];
}

//Arrays클래스를 이용한 깊은 복사
int[] new_cards2 = Arrays.copyOf(cards, cards.length);

new_cards[1] = 100;
System.out.println("cards 배열 : " + Arrays.toString(cards));
System.out.println("new_cards 배열 : " + Arrays.toString(new_cards));
System.out.println("new_cards2 배열 : " + Arrays.toString(new_cards2));

결과

cards 배열 : [1, 6, 4, 5, 3, 2]
new_cards 배열 : [1, 100, 4, 5, 3, 2]
new_cards2 배열 : [1, 6, 4, 5, 3, 2]

출력 전 new_cards[1]의 값을 바꿨지만 원본에 간섭이 없는 걸 확인할 수 있다.

 

Arrays에 더 많은 함수들이 있지만 자주 쓰일 거 같은 함수들만 간단하게 살펴봤다.

 

[JAVA]클래스(Class)

클래스란? - 객체를 생성하기 위한 설명서이다. - 어떤 물건을 만들기 위한 매뉴얼이라고도 생각할 수 있다. - 클래스를 기반으로 객체를 생성해야 한다. - 하나의 설명서로 여러 개의 여러 개의

treebomb-code.tistory.com