2017년 6월 27일 화요일

[Java] 배열(Array)

자바에서 배열(Array)는 같은 형(type)의 값들을 저장하는 자료구조이다. index 값을 통해 각 값에 접근이 가능하다. 예를들어, 배열 a 가 존재할 때 a[i]는 a 배열의 i번째 값이다. 배열의 선언은 어떤 형의 배열인지를 표기하고, 초기화시는 배열의 길이를 정해주면 된다. 그리고 바로 값을 어싸인하여 배열을 생성할수도 있다

double[] a = new double[3]; //double 3개를 저장할 수 있는 배열
int b[] = new int[10]; //인터져 10개를 저장할 수 있는 배열
b[0] = 113; //배열 b의 첫번째 값에 113을 저장
System.out.println(a[0]); //0.0
System.out.println(b.length); //10

int[] c = { 1, 2, 3, 4, 5 };
int[] d = new int[] { 6, 7, 8, 9, 10 };

배열의 인덱스는 0부터 시작한다. 길이가 10인 배열은 0 ~ 9까지의 인덱스를 가지고, 100이라면 0 ~ 99까지의 인덱스를 가진다.
배열 초기 생성시, 정수나 소수형 배열은 모든 값에 0이 저장되고, 객체형 배열은 null 값이 저장된다. array.length 프로퍼티를 이용해 배열의 길이를 알 수 있다.
배열은 한번 생성되게되면 그 길이를 수정할 수 없다. 만약 배열의 길이가 수정되어야할 필요가 있다면 ArrayList라는 객체를 이용해야한다.

어레이의 모든 값을 대상으로 하는 for-each 루핑이 존재한다. for-each loop를 이용하면 굳이 인덱스를 통하지 않고 배열의 모든 값에 접근이 가능하다.


int[] a = new int[10];
for(int i = 0; i <a.length; i++){
 System.out.print(a[i] + " ");
}
//0 0 0 0 0 0 0 0 0 0 
System.out.println();


for(int i : a){
 System.out.print(i + " ");
}
//0 0 0 0 0 0 0 0 0 0

//둘다 같은 결과값을 낸다.

배열은 객체이기 때문에 한 배열을 다른 배열에 어싸인하는 것은 2개의 배열이 같은 메모리값를 참조하게 만든다. 그렇기 때문에 배열의 값이 수정되면 2 배열이 같은 메모리 위치를 참조하기 때문에 모두 수정된 값을 가지게 된다. 그렇기 때문에 배열을 복사하거나 배열의 길이를 늘리고 싶다면 Arrays.copyOf 메소드를 이용해야한다.


int[] a = { 1, 2, 3, 4, 5 };
int[] b = a;
for (int i = 0; i < a.length; i++) {
 a[i]++;
}
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));

a = Arrays.copyOf(a, a.length * 2);
// 배열 a와 같은 값을 가지고 크기가 2배인 배열 생성후 어싸인
b = Arrays.copyOf(a, a.length);
// 배열 a 복사 후 b에 어싸인

for (int i = 0; i < a.length; i++) {
 a[i]++;
}

System.out.println(Arrays.toString(b));
// [2, 3, 4, 5, 6, 0, 0, 0, 0, 0]

System.out.println(Arrays.toString(a));
// [3, 4, 5, 6, 7, 1, 1, 1, 1, 1]

배열 정렬


손쉽게 배열을 정렬하고 싶다면 Arrays.sort() 메소드를 이용하면 된다. 기본적인 Quick Sort 알고리즘을 적용한 메소드이다.


int[] a = new int[5];
for (int i = 0; i < a.length; i++) {
 a[i] = (int)(Math.random()*10);
}
System.out.println(Arrays.toString(a));
//[4, 9, 1, 2, 2]
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//[1, 2, 2, 4, 9]

다차원 배열(Multidimensional Array)


다차원 배열은 2개 이상의 인덱스를 사용해 값에 접근해야하는 배열이다. 1차원 배열이 부족할 때 사용된다. 예를들어 3*3 매트릭스를 만들고 싶다고 하면
원리는 단순히 1차원 배열의 각 값에 또다른 배열이 들어있다 생각하면 된다. 그렇기 때문에 접근방법은 동일하다. 그렇기 때문에 각 2차원 배열의 크기가 틀리게 생성할수도 있다.


int[][] a = new int[3][3];//3*3 이차원 배열
a[1][1] = 10;
for(int[] i : a)
{
 System.out.println(Arrays.toString(i));
}
// [0, 0, 0]
// [0, 10, 0]
// [0, 0, 0]

// 2차원 배열이 다른 크기를 가진 배열 생성
int[][] b = new int[6][];
for(int i = 0;i

댓글 없음:

댓글 쓰기