타입
[]
변수
;
ex. int[] intArray;
타입
변수[]
;
ex. int intArray[];
배열(Array)는 참조형 변수들처럼 new 명령을 통해서 생성하며, 대괄호[] 안에 크기를 지정
// 배열 생성
//배열 생성후 초기화하면 배열의 주소가 할당된다.
int[] intArray = new int[3]; // 초기값 {0,0,0}
boolean[] boolArray = new boolean[3]; // 초기값 {false, false, false}
String[] stringArray = new String[3]; // 초기값 {"","",""}
//배열 선언만 해놓고 나중에 초기화를 시킬수도 있다.
int[] intArray2;
intArray2 = new int[3]; // 초기값 {0,0,0}
배열 변수뒤에 대괄호 [] 안에 반복문 순번값 i 를 넣어주면
i번째 값을 조회할 수 있음!
//길이가 8인 정수배열 선언
int[] intArray = new int[3];
// 배열이 초기화된 값을 출력해본다.
for(int i=0; i<intArray.length; i++) { // .length 는 배열의 길이
System.out.println(intArray[i]);
}
🔎
.length
메서드
배열이 지원하는 메서드로써 해당 배열의 길이값 반환
배열의 길이는 처음에 선언한 크기를 가짐
{}
사용for
문 사용(또는 향상된 for문)Arrays.fill
메소드 사용// 배열 초기화
import java.util.Arrays; // Arrays 클래스를 import 해주세요!
//1. 배열에 특정값 대입하며 선언
int[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = {"a", "b", "c", "d"};
//2-1. for문을 통해 값을 대입
for (int i = 0; i < intArray.length; i++) {
intArray[i] = i;
}
//2-2. 향상된 for문을 통한 배열 출력
for (int i : intArray) {
System.out.print(i); // 01234
}
//3. 배열의 주소를 모두 같은값으로 초기화
Arrays.fill(intArray, 1); //배열의 모든 값을 1로 초기화
for (int i : intArray) {
System.out.print(i); // 11111
}
=
를 사용해서 복사를 하게 되면 주소값만 복사됨// 얕은 복사
int[] a = { 1, 2, 3, 4 };
int[] b = a; // 얕은 복사
b[0] = 3; // (1 -> 3)
System.out.println(a[0]); // 3
for 문
을 통해서 하나씩 꺼내서 복사해주는 방법과 여러 메서드를 사용하는 방법이 있음// 깊은 복사
int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];
for (int i = 0; i < a.length; i++) {
b[i] = a[i]; // 깊은 복사
}
b[0] = 3; // (1 -> 3)
System.out.println(a[0]); // 1
// 깊은 복사 메서드
// 1. clone() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone(); // 가장 간단한 방법입니다.
// 하지만, clone() 메서드는 2차원이상 배열에서는 얕은 복사로 동작함!!
// 2. Arrays.copyOf() 메서드
import java.util.Arrays;
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열, 크기
int[][] array
int array[][]
int[] array[]
int[][] array = new int[][];
// 중괄호를 사용해 선언&초기화
int[][] array = {
{1, 2, 3},
{4, 5, 6}
};
// 반복문을 통한 초기화
int[][] array = new int[2][3]; // 선언
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
arr[i][j] = 0;
}
}
// 가변 배열
// 선언 및 초기화
int[][] array = new int[3][];
// 배열 원소마다 각기다른 크기로 지정 가능
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
// 중괄호 초기화
int[][] array2 = {
{10, 20},
{10, 20, 30, 40},
{10}
};
2차원 배열외에도 3차원, 4차원 등..이 있지만 거의 대부분 3차원 까지만 사용하는경우가 많다.
// 3차원 배열의 이해
// 중괄호 3개를 써서 3차원 배열 초기화를 할 수 있습니다.
int[][][] MultiArray = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
// 가변 2차원 배열 조회
int[][] array = {
{10, 20, 30},
{10, 20, 30, 40},
{10, 20}
};
for (int i = 0; i < array.length; i++) { // 1차원 길이
for (int j = 0; j < array[i].length; j++) { // 2차원 길이
System.out.println(array[i][j]); // 2중 반복문으로 i, j 인덱스 순회
}
}
배열을 다룰 때 알아두면 편리한 Arrays의 메소드를 알아두쟈
Arrays.copyOf(arr)
: 배열 전체 복사Arrays.copyOfRange(arr, begin, end)
: begin부터 end전까지 배열 일부 복사(자르기)Arrays.fill(arr, x)
: 배열을 모두 x값으로 채움Arrays.asList(arr)
: 배열을 ArrayList로 변환 Arrays.sort(arr)
: 기본 정렬(오름차순)Arrays.sort(arr, Collections.reverseOrder())
: 내림차순 정렬(정수는 컬랙션으로 정렬해야함...!)Arrays.binarySearch(arr, x)
: x값 이진탐색 후 인덱스 반환🚨 primitive타입(int)는 내림차순 정렬이 불가능하다!
그래서 wrapper클래스(Integer)로 바꿔줘야한다.Integer[] arr2 = Arrays.stream(arr).boxed().toArray(Integer[]::new); Arrays.sort(arr2, Collections.reverseOrder());
🔗 스파르타코딩클럽 Java 문법 종합반