본문 바로가기

STUDY/국비과정

[JAVA 웹 개발 공부] 국비지원 16일차 - 배열의 출력, 길이 변경, 복사, 비교, 정렬하기, 가변인자

배열의 출력

 

'Arrays.toString(배열이름)' 메서드를 사용하여 출력할 수 있다.

이 메서드는 배열의 모든 요소를 [첫번째 요소, 두번째 요소, ...] 와 같은 형식의 문자열로 만들어서 반환한다.

Arrays.toString()을 사용하려면, 'import java.util.Arrays;'를 추가해야 한다.

// 배열 출력하기
int[] iArr = { 100, 95, 80, 70, 60 };
System.out.println(Arrays.toString(iArr)); // [100, 95, 80, 70, 60]

 

예외적으로 char 배열은 println 메서드로 출력하면 각 요소가 구분자 없이 그대로 출력되는데, 이것은 println 메서드가 char 배열일 때만 이렇게 동작하도록 작성되었기 때문이다.

char[] chArr = { 'a', 'b', 'c', 'd' };
System.out.println(chArr); // abcd

 

 

배열의 길이 변경하기

 

배열은 한번 선언되고 나면 길이를 변경할 수 없다. 배열에 저장할 공간이 부족한 경우에는 더 큰 길이의 새로운 배열을 생성한 다음, 기존의 배열에 저장된 값들을 새로운 배열에 복사하면 된다.

int[] arr = {44, 55, 66};
int[] expand = new int[5];
for (int i = 0; i < arr.length; i++) {
	expand[i] = arr[i];
}
System.out.println(Arrays.toString(expand)); // [44, 55, 66, 0, 0]

 

배열의 길이를 변경하는 메서드를 만들어서 메서드호출을 통해 배열의 길이를 변경할 수 있다.

import java.util.Arrays;

public class Main4 {
	public static int[] expandArr(int[] origin, int plus) {
		int[] copy = new int[origin.length + plus];
		for (int i = 0; i < origin.length; i++) {
			copy[i] = origin[i];
		}
		return copy;
	}

	public static void main (String[]args){
	// 다음과 같은 int 배열의 길이값을 증가시키고자 함
		int[] arr = {44, 55, 66};

		int[] expand = expandArr(arr, 2);
		System.out.println(Arrays.toString(expand));
	}
}

 

 

배열의 복사

 

배열을 복사하기 위해서는 새로운 배열을 생성한 다음, 기존의 배열에 저장된 값들을 새로운 배열에 복사해준다.

int[] arr = { 33, 44, 55 };
	int[] copy = copyArr(arr);
    int[] copy = new int[arr.length];
    
    for (int i = 0; i < arr.length; i++) {
        copy[i] = arr[i];
    }		
    
    System.out.println(Arrays.toString(copy)); // [33, 44, 55]
    System.out.println(copy == arr); // false (참조값이 다르다.)

 

배열을 복사하는 메서드를 만들어서 메서드호출을 통해 배열을 복사할 수 있다.

public class Main3 {
	public static int[] copyArr(int[] origin) {
		int[] copy = new int[origin.length];
		
		for (int i = 0; i < origin.length; i++) {
			copy[i] = origin[i];
		}
		return copy;
	}
	
	public static void main(String[] args) {
		// 다음과 같은 정수 배열과 같은 길이와 원소를 가지는 배열 만들기(복사)
		int[] arr = { 33, 44, 55 };
		int[] copy = copyArr(arr);
	
		System.out.println(Arrays.toString(copy));
		System.out.println(copy == arr);
	}
}

 

'Arrays.copyOf(원본배열, 원본 배열에서 복사해올 길이)' 메서드를 사용하여 배열을 복사할 수 있다.

// 배열 복사하기
int[] copy = Arrays.copyOf(new int[] { 44, 55, 66 }, 6);
System.out.println(Arrays.toString(copy)); // [44, 55, 66, 0, 0, 0]

 

 

배열의 비교

 

'Arrays.equals(배열, 배열)' 메서드를 사용하여 배열을 비교할 수 있다. 

// 배열 비교하기
boolean result = Arrays.equals(new int[] { 10, 20, 30 }, new int[] { 10, 20, 30 });
System.out.println(result); // true

 

 

배열의 원소 초기화

 

'Arrays.fill(배열, 값)' 메서드를 사용하여 배열에 동일한 값을 저장할 수 있다. 

// 배열 원소 초기화하기
int[] newArr = new int[10];
Arrays.fill(newArr, 10); // 원하는 숫자(10)로 초기화
System.out.println(Arrays.toString(newArr)); // [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]

 

 

배열의 정렬(오름차순)

 

'Arrays.sort(배열)' 메서드를 사용하여 배열을 오름차순으로 정렬할 수 있다. 

// 배열의 오름차순 정렬
int[] iArr = { 100, 95, 80, 70, 60 };
Arrays.sort(iArr);
System.out.println(Arrays.toString(iArr));

 

 

배열 합치기

 

import java.util.Arrays;

public class Main6 {
	public static int[] newArr(int[] left, int[] right) {
		int[] newArr = new int[left.length + right.length];
		
		for (int i = 0; i < left.length; i++) {
			newArr[i] = left[i];
		}
		
        for (int i = left.length; i < newArr.length; i++) {
			newArr[i] = right[i - left.length];
		}
        
		return newArr;
	}
	
	public static void main(String[] args) {
		int[] left = { 10, 20, 30 };
		int[] right = { 40, 50, 60 };
		
		int[] concat = newArr(left, right);
		System.out.println(Arrays.toString(concat)); // [10, 20, 30, 40, 50, 60]
	}
}

 

 

배열의 원소 값 비교

 

// 배열 원소 중 가장 큰 값 구하기
int[] arr = { 20, 30, 10, 50, 40 };
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
    if (max < arr[i]) {
        max = arr[i];
    }
}
System.out.println(max); // 50
// 배열 원소 값 바꾸기
int[] iArr = { 100, 95, 80, 70, 60 };
int tmp = iArr[0];
iArr[0] = iArr[1];
iArr[1] = tmp;

System.out.println(Arrays.toString(iArr)); // [95, 100, 80, 70, 60]

 

 

 

가변인자

 

메서드의 매개변수 개수를 지정해 주는 기능을 '가변인자(variable arguments)'라고 한다.

가변인자는 '타입... 변수명'과 같은 형식으로 선언한다.

가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다.

public class Main9 {
	public static void printAll(int... arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}
	public static void main(String[] args) {
		printAll(10, 20, 30, 40, 50);
	}
}
10
20
30
40
50