-같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
-많은 양의 값(데이터를)을 다룰 때 유용하다.
-배열의 각 요소는 서로 연속적이다.
타입 또는 변수이름 뒤에 대괄호[]를 붙여서 선언한다.
int [] score = new int[5]; //5개의 int값을 저장할 수 있는 배열을 생성한다.
Ex) int[]score; , String[] name; , int score[]; , String name[];
-배열을 선언한다고 해서 값을 저장할 공간이 생성되는 것이 아니라 배열을 다루는데 필요한 변수가 생성된다.
int[] score; //배열을 선언한다.(생성된 배열을 다루는데 사용될 참조변수 선언)
score = new int[5]; //배열을 생성한다.(5개의 int값을 저장할 수 있는 공간 생성)
줄여서 쓰면 int [] score = new int[5]; //선언과 생성을 동시에 할 수 있다.
-생성된 배열에 처음으로 값을 저장하는 것
int[]score = new int[5]; //크기가 5인 int형 배열을 생성한다.
score[0] = 100; //각 요소에 직접 값을 저장한다.
score[1] = 90;
score[2] = 80;
score[3] = 70;
score[4] = 60;
int[]score = {100,90,80,70,60}; //이렇게 사용이 가능하다.
int[]score = new int[]{100,90,80,70,60};
int[]score;
score = {100,90,80,70,60}; //Error!
int[]score;
score = new int[]{100,90,80,70,60}; //OK!
-배열에 값을 저장하고 읽어오기
score[3] = 100; //배열 score의 4번째 요소에 100을 저장한다. int value = score[3] //배열 score의 4번째 요소에 저장된 값을 일겅서 value에 저장.
-'배열이름.length'는 배열의 길이를 알려준다.
//int[]score ={100,90,80,70,60}; for(int i=0; i< score.length; i++){ System.out.prinln(score[i]); }
package Array;
public class ArrayEx1 {
public static void main(String[] args) {
int[]ball = new int[45]; //45개의 정수값을 저장하기 위한 배열 생성.
for(int i=0; i<ball.length; i++){ //배열의 각 요소에 1~45의 값을 저장한다.
ball[i] = i+1; } //ball[0]에 1이 저장된다.
int temp = 0; //두 값을 바꾸는데 사용할 임시변수
int j = 0; //임의의 값을 얻어서 저장할 변수
//배열에 저장된 값이 잘 섞이도록 충분히 큰 반복횟수를 지정한다.
//배열의 첫 번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞는다.
for(int i=0; i<100; i++){
j=(int)(Math.random())*45; //배열 범위(0~44)의 임의의 값을 넣는다.
temp = ball[0];
ball[0] = ball[j]; //ball[0]와 ball[j]의 값을 서로 바꾼다.
ball[j] = temp;
}
//배열 ball의 앞에서 부터 6개의 요소를 출력한다.
for(int i=0; i < 6; i++){
System.out.println(ball[i]+" ");
}
}
}
-'[]'의 개수가 차원의 수를 의미한다.
타입[][]변수이름; >int[][]score;
타입 변수이름[][]; >int score[][];
타입[]변수이름[]; > int[] score[];
int[][]score = new int[5][3]; //5행 3열의 2차원 배열을 생성한다.
int[][]score = {(100,100,100),
(20,20,20),
(30,30,30),
(40,40,40),
(50,50,50),
};
-for문을 이용한 배열의 복사
int[]number={1,2,3,4,5};
int[]newNumber=new int[10];
for(int i=0; i<number.length; i++){
newNumber[i] = number[i]; //배열 number의 값을 newNumber에 지정한다.
-System.arraycopy()를 이용한 배열의 복사
-단순히 객체의 주소 값만을 복사하는 것이다.
-때문에 실제로는 하나의 주소 값만을 가지고 서로 간의 값은 바뀌지 않는다.
-대부분 객체를 복사한다는 말은 얕은 복사가 아닌 깊은 복사를 의미한다.
-간단하게 말하면 얕은복사는 한쪽에서 수정이 발생되면 다른쪽에서도 영향을 끼쳐 같아지게 된다.
-복사한 배열에서 어떠한 값을 수정하면 원래 배열에도 변경된 값이 들어가게 됩니다.public class ArrayShallowCopy{ public static void main(String[] args){ int[] arr1 = {1,2,3}; int[] arr2 = arr1; } } //" = " 연산자는 '주소를 이어준다' 라고 이해하면되는데, 위의 예제는 a의 배열을 b배열로 =연산자를 이용ㅇ하여 대입했기에 얕은 복사가 된다. 즉 참조에 의한복사(같은 주소값을 가짐) 때문에 arr2의 값을 수정하면 arr1의 값도 같이 수정된다.
-객체의 실제 값을 새로운 객체로 복사한다.
-복사된 배열이나 원본 배열은 변결될 때 서로간의 값은 바뀌지 않는다.
-주로 Object.clone(), System.arraycopy를 쓴다.
-Object.clone()
ublic class Array_Copy_Clone{
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone();
}
}
//만약, 객체 배열의 경우 clone()을 사용하면 깊은 복사가 되지 않는다.
//왜냐하면 객체는 주소값을 가지고 있기 때문이다.(일반 자료형의 배열만 깊은 복사가 가능)
//마찬가지로 2차원 배열도 각각 로우에 대한 주소값이 존재하기에 깊은 복사가 되지 않는다.
-System.arraycopy()
public class Array_Copy_ArrayCopy{
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
}
}
//System.arraycopy(src, srcPos, dest, destPos, a.length); 형식으로 사용한다
//복사할 배열,복사할 배열의위치,붙여넣을 배열,붙여넣을 배열의 시작위치,복사할길이 순서로 들어간다.