배열의 선언: 배열을 다루기 위한 참조변수의 선언
배열의 선언만으로 배열 공간이 할당되지 않는다. 배열 공간에 대한 주소값을 가질 뿐 그 자체가 배열은 아니다.
또 배열 선언 시 []에 크기를 지정하면 안된다.
즉 int Array[10];과 같은 문장은 컴파일 오류이다.
배열의 생성은 저장할 배열 공간을 할당받는 과정이다.
이 때 배열의 길이만큼의 공간을 할당받고, 배열에 대한 주소값을 저장한다.
배열의 선언: 타입[] 변수이름;
배열의 생성: 변수이름 = new 타입[길이];
배열의 선언과 생성을 동시에: 타입[] 변수이름 = new 타입[길이];
ex) int[] score = new int[5];
이 때 이 변수는 참조변수이고, 참조변수를 통해서 배열을 다룰 수 있다.
배열은 생성과 동시에 자동적으로 기본값 0으로 초기화된다.
배열에 원하는 값을 저장하려면 각 요소에 값을 지정하여 초기화할 수 있다.
int[] score = new int[]{50,60,70,80,90};
int[] score = {50,60,70,80,90};
이 때 괄호 { } 안의 개수에 의해 배열의 길이가 자동으로 결정된다.
위의 경우 괄호 안에 값을 저장하여 초기화했으나
배열이름[인덱스]의 형식으로 배열의 요소에 접근할 수도 있다.
이 때, 이 인덱스에 음수는 사용이 불가능하다.
int[] score = new int[5];
score[0] = 50;
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
public class ArrayPrint {
public static void main(String[] args) {
int[] Arr = {100,95,80,70,60};
for(int i = 0; i<Arr.length; i++){
System.out.println(Arr[i]);
}
}
}
//for-each문
public class ArrayPrint {
public static void main(String[] args) {
int[] Arr = {100,95,80,70,60};
for(int x : Arr){
System.out.print(x + " ");
}
}
}
import java.util.Arrays;
public class ArrayPrint {
public static void main(String[] args) {
int[] Arr = {100, 95, 80, 70, 60};
System.out.println(Arrays.toString(Arr)); //[100, 95, 80, 70, 60]
}
}
import java.util.Arrays;
public class ArrayPrint {
public static void main(String[] args) {
int[] arr1 = new int[10];
int[] arr2 = new int[10];
int[] arr3 = new int[]{100, 95, 80, 70, 60};
char[] charr = {'a', 'b', 'c', 'd'};
for (int i = 0; i < arr1.length; i++) {
arr1[i] = i + 1;
}
for (int i = 0; i < arr2.length; i++) {
arr2[i] = (int) (Math.random() * 10) + 1;
}
for (int i = 0; i < arr1.length; i++) {
System.out.printf(arr1[i] + ",");
}
System.out.println();
System.out.println(Arrays.toString(arr2));
System.out.println(Arrays.toString(arr3));
System.out.println(Arrays.toString(charr));
System.out.println(arr3); //주소만 나옴
System.out.println(charr); //char배열은 예외적으로 저장된 배열 출력
}
}
output
1,2,3,4,5,6,7,8,9,10,
[1, 8, 7, 8, 5, 3, 6, 8, 2, 4]
[100, 95, 80, 70, 60]
[a, b, c, d]
[I@51efea79
abcd
public class ArrayPrint {
public static void main(String[] args) {
int sum = 0;
float avg = 0f;
int[] score = {100, 88, 100, 100, 90};
for (int i = 0; i < score.length; i++) {
sum += score[i];
}
avg = sum / (float) score.length;
System.out.println("sum : " + sum);
System.out.println("avg : " + avg);
}
}
output
sum : 478
avg : 95.6
public class ArrayPrint {
public static void main(String[] args) {
int[] score = {23, 99, 55, 28, 76, 49, 83};
int max = score[0];
int min = score[0];
//배열의 첫번째 값으로 최대/최소값 초기화
for (int i = 1; i < score.length; i++) {
if (score[i] > max) {
max = score[i];
} else if (score[i] < min) {
min = score[i];
}
}
System.out.println("max : " + max);
System.out.println("min : " + min);
}
}
output
max : 99
min : 23
import java.util.Arrays;
public class ArrayPrint {
public static void main(String[] args) {
int[] arr = {0,1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.toString(arr));
for(int i = 0; i<100; i++) {
int n = (int) (Math.random() * 10); //0~9 임의
int tmp = arr[0];
arr[0] = arr[n];
arr[n] = tmp;
}
System.out.println(Arrays.toString(arr));
}
}
output
null
null
null
배열은 한번 생성하면 크기를 변경할 수 없기 때문에
더 큰 배열을 새로 만들고 이전 배열의 값들을 복사할 수도 있다.
더 디테일한 설명은 얕은 복사/깊은 복사
public class ArrayCopy {
public static void main(String[] args) {
int[] oldArray = {1,2,3};
int[] newArray = new int[5];
for(int i = 0; i<oldArray.length; i++) {
newArray[i] = oldArray[i];
}
for(int i = 0; i<newArray.length; i++){
System.out.print(newArray[i] + ", ");
}
}
}
output
1, 2, 3, 0, 0,
System.arraycopy(object src, int srcPos, object dest, int destPos, int length);
이 때 src는 원본 배열, srcPos는 원본 배열에서 복사할 항목의 시작 인덱스, dest는 새 배열, destPos는 새 배열에서 붙여넣을 시작 인덱스, length는 복사할 개수이다.
public class ArrayCopy {
public static void main(String[] args) {
int[] oldArray = {1, 2, 3};
int[] newArray = new int[5];
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
for (int i = 0; i < newArray.length; i++) {
System.out.print(newArray[i] + ", ");
}
}
}