int[] num; //선언
int[] num = new int[5]; //int타입의 크기 5인 배열 생성
num[0] = 1; //배열 값 초기화
num[1] = 2;
num[2] = 3;
num[3] = 4;
num[4] = 5;
int[] num = {1, 2, 3, 4, 5}; // 선언과 동시에 초기화
//순차적인 값을 넣을 땐 for문을 이용하면 간편하다
for(int i = 0; i < num.length; i++){ //num.length 는 배열의 길이, 값 개수
num[i] = i + 1;
}
int[] num = {1, 2, 3, 4, 5};
System.out.println(num); // [I@7ad041f3
// [I : 배열 integer
// @7ad041f3 : 주소값
변수 출력하듯이 배열변수명만 출력하면 배열의 주소값이 출력된다.
배열의 원소들을 출력하려면 for문을 이용하거나 자바에서 제공되는 Arrays.toString() 메서드를 이용해야 한다.
Arrays 클래스의 모든 메소드는 static 메소드이므로 따로 객체를 생성하지 않고도 바로 사용할 수 있는 특징이 있다.
다만 Arrays 클래스의 메소드를 사용하고 싶다면 상단에 반드시 import 문으로 java.util 패키지를 불러와야 한다.
import java.util.Arrays; // Arrays.toString()을 사용하기 위한 import
class Test{
public static void main(String[] args) {
int[] arr = {10, 9, 8, 7, 6};
// for문으로 직접 배열 원소 출력
for(int i = 0 ; i < arr.length; i++){
System.out.print(arr[i]+ " "); //10 9 8 7 6
}
//forEach로 간단하게
for(int i : arr){
System.out.print(arr[i]+ " ");
}
// Arrays.toString() 메서드 사용하여 심플하게 바로 출력
System.out.println(Arrays.toString(arr)); // [10, 9, 8, 7, 6]
}
}
다차원 배열이란 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미한다고 보면 된다.
1차원 배열은 [] 1번만 썼다, 2차원은 대괄호 [][] 를 쓰면 된다.
int[][] num = new int[2][3]; // 행이 2, 열이 3 인 배열
num[0][1] = 10;
num[0][1] = 20;
num[0][2] = 30;
num[1][0] = 40;
num[1][1] = 50;
num[1][2] = 60;
// 2차원 배열 선언 + 초기화
int[][] num2 = {
{10,20,30},
{40,50,60}
}
성능상 중첩 for문 보단 Arrays.deepToString() 메서드를 사용하는게 좋다.
int[][] num2 = {
{10,20,30},
{40,50,60}
}
for(int i = 0 ; i < num2.length ; i++) { // 먼저 행 부분을 순회하고
for(int j = 0 ; j < num2[i].length ; j++) { // i 행의 열 부분을 순회하며 각 원소를 출력
System.out.print(num2[i][j]+" ");
}
System.out.println(); // 한 행 출력 후 줄바꿈
}
// 10 20 30
// 40 50 60 이렇게 출력된다.
for (int[] itemA : num2){ //배열값 모두 출력할때 foreach문이 용이
for(int itemB : itemA){
System.out.print(itemB + " ");
}
System.out.println();
}
//Arrays 를 이용할 때 deepToString()을 사용
System.out.println(Arrays.deepToString(num2)); // [[10, 20, 30], [40, 50, 60]
출력, 복사, 비교, 정렬 등이 있다.
사용하기 위해 import java.util.Arrays; 해야한다.
1차원 배열 -> Arrays.toString()
다차원 배열 -> Arrays.deepToString()
for문 보다 메서드를 이용하는게 거의 두배 정도 빠르게 복사한다고 한다
import java.util.Arrays;
class Test{
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[arr1.length * 2]; // 원래 배열보다 길이가 두배인 새로운 배열을 선언
// Array.copyOf() 메서드 사용
//Array.copyOf(복사할 배열명,인덱스값) 복사할 배열의 인덱스 0부터 인덱스값 전까지 복사
arr2 = Arrays.copyOf(arr1, arr1.length); //arr1 전체 복사
System.out.println(Arrays.toString(arr2)); // [1, 2, 3, 4, 5]
//Array.copyOfRange(복사할 배열명,인덱스값1,인덱스값2) 복사할 배열의 인덱스1<= <인덱스2 복사
arr2 = Arrays.copyOfRange(arr1, 1, 3); // arr1의 인덱스 1,2 복사
System.out.println(Arrays.toString(arr2)); // [2, 3]
}
}
두 배열이 같은지 비교할 때, for문으로 순회하며 비교할 수 있지만 Arrays.equals() 메서드를 사용하면 간단하다.
다차원 배열 비교는 Arrays.deepEquals() 를 사용하면 된다.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] arr1 = { "딸기", "바나나", "키위", "자몽", "망고" };
String[] arr2 = { "딸기", "바나나", "키위", "자몽", "망고" };
String[] arr3 = { "배", "포도", "키위", "자몽", "사과" };
System.out.println(Arrays.equals(arr1, arr2)); // true
System.out.println(Arrays.equals(arr1, arr3)); // false
}
}
Arrays.sort() 오름차순으로 정렬된다.
import java.util.Arrays;
class Test{
public static void main(String[] args) {
int[] arr = {3, 2, 5, 1, 4};
// 오름차순 정렬
Arrays.sort(arr); // 자기 자신 배열을 정렬 시킴 (정렬된 배열을 반환하는 것이 아니다)
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5]
// 내림차순 정렬
Arrays.sort(arr);
int[] reversedArr = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
reversedArr[i] = arr[arr.length - 1 - i];
}
System.out.println(Arrays.toString(reversedArr)); // [4,3,2,1,0]
// 배열 일부부만 정렬
int[] arr = {3, 2, 5, 1, 4};
Arrays.sort(arr, 0, 3); // 배열 0<= 인덱스 <3 만 정렬
System.out.println(Arrays.toString(arr)); // [2, 3, 5, 1, 4]
}
}