java2-배열

Download Report

Transcript java2-배열

Chapter 3. 배열
3.1 배열의 선언
배열이란?
같은 종류의 데이터 형을 모은 것.
많은 양의 데이터를 일정한 방식으로 처리할 때 유용하다.
배열의 선언법은
형명 배열 변수명[] = new 형명[요소수];
형명 배열 변수명[][] = new 형명[요소수][요소수];
- 1차원 배열
- 2차원 배열
다차원 배열을 쓰는 이유 :
메모리는 연속적이기 때문에 사실 1차원 배열을 쓰는 것 만으로도
충분하다. 그런데 다차원 배열을 쓰는 이유는 가독성과 프로그래밍
의 편리성. 즉 프로그래머의 편의를 위하여 쓰는 것이다.
ex> 그래픽 화면을 배열에 넣을 경우
1차원 배열 : a[가로넓이 * 줄 수 + 행의 번호]
2차원 배열 : a[세로줄 수][행의 번호]
3.1 배열의 선언
배열의 사용법
Int a[] = new int[10];
- int형의 길이가 10인 배열 a
Double b[] = new double[20];
- double형의 길이가 20인 배열 b
Int c[];
C = new int[10];
- 배열명을 우선 선언하고
요소수 만큼의 영역 확보
JAVA에서는 배열 선언을 “형명[]”으로 할 수도 있다.
Int a[] = new int[10];
이것을
Int [] a = new int[10];
 이렇게 작성할 수도 있다.
대표적 예 :
Public static void main(String[] args) {
…
}
3.1 배열의 선언
배열의 개별 요소에 값을 설정하거나 참조할 때엔 “첨자”를 사용하여
지정한다. 첨자는 0부터 시작한다.
Ex> int a[] = new int[10]; 일때
a[5] = 20;
배열a의 6번째 요소값은 20.
a[6] = a[8];
a[6]에 a[8]의 내용을 대입.
a[10] = 100;
에러. 주소값은 0~9까지이다.
** 배열의 첨자에 long 형은 사용할 수 없다.
배열의 첨자는 정수형 으로 지정한다.
(그러나 char형은 int형으로 자동 변환되므로 가능하다.)
문자열을 나타낼땐 String **
3.2 배열의 초기화
배열의 초기화 예
Int a[] = { 10, 20, 30, 40, 50 }; // int a[] = new int[]{1,2,3,4};
초기화하지 않으면 배열은 디폴트 초기값을 가지게 된다.(chapter 2 참
고). 수치 배열일 경우, 디폴트 초기값은 0이 된다.
요소를 확보하지 않은 배열명은 null이 된다.
3.3 배열의 길이
JAVA에서 배열은 배열 길이의 정보를 가지고 있다.
3.4 값의 대입과 참조의 대입
배열의 값은 개별적으로/배열명을 사용하여 대입할 수 있다.
Int a[] = {10, 20, 30, 40 };
Int b[] = new int[4];
Int c[];
b[1] = 50;
- 개별적 대입. b[1]의 값은 50이다.
b[2] = a[2];
- b[2]는 a[2]의 값인 30이 된다.
c = a;
- 배열명을 사용하여 대입. c[0]의 값은 10,
c[1]의 값은 20… 이 된다.
배열명을 사용하여 대입하면 배열 a의 모든 내용을 참조할 수 있게
된다. 단, 이 경우 개개의 값이 복사되는 것이 아니라 배열명 a 자신
이 유지하는 참조값이 c에 복사된다.
즉 c[0]의 값은 a[0]의 값 자체이다. -> 즉 이 관계를 설정한 후에
a[0]의 값을 80으로 변경한다면 c[0] 의 값도 80으로 변경된다.
3.4 값의 대입과 참조대입
3.4 값의 대입과 참조대입
– 복사 –
Clone 에 의한 배열의 복사 :
배열의 내용을 그대로 복사하기 위한 방법중 clone() 메소드가 있다.
ex> int a[], b[] = {10, 20, 30, 40};
a = (int[])b.clone();
위 식은 배열 b의 내용을 그대로 다른 메모리 영역에 복사하고, 그 새로운 영역
의 참조값을 a에 집어넣었다. 그 다음 배열 a와 b는 독립적 개별체가 된다. (반
환값을 원하는 형태로 받기 위해선 (int[])와 같은 코드가 필요하다.)
=> Clone 복사는 다차원 배열일 경우 각 차원마다 clone을 복사해야 한다. (번
거롭다)
Because – clone() 매소드는 shallow copy를 한다.
Shallow copy : 개체는 다르지만, 객체들은 동일하다. <-> deep copy
- 2차원 배열의 clone복사일 경우 int aa[][] = {{11,22,33,44}, {55,66,77,88}};
int bb[][] = new int[aa.length][];
for(int i=0; i<aa.length; i++)
bb[i] = (int[])aa[i].clone();
3.4 값의 대입과 참조대입
Arraycopy에 의한 배열의 복사 :
System.arraycopy() 메소드로 복사하기 –
Ex> int to[] = new int[4];
int from[] = {11, 22, 33, 44};
System.arraycopy(from, 0, to, 0, from.length);
위 예는 from배열의 첨자 0(from[0])에서 from.length길이의 데이터
를 to 배열의 첨자0(to[0])부터 복사하는 것이다.
System.array()메소드는 clone()메소드와는 달리 단순히 데이터를 복
사할 뿐이므로 복사가 되는 배열은 사전에 적절한 크기가 확보되어야
한다.
3.5 다차원 배열
다차원 배열의 선언 예
다차원 배열의 초기화
Int a[][] = new int[3][5];
Int b[][];
b = new int[3][5];
Int c[][] = new int[3][];
c[0] = new int[5];
c[1] = new int[5];
c[2] = new int[5];
Int d[][];
d = new int[3][];
d[0] = new int[5];
d[1] = new int[5];
d[2] = new int[5];
Int f[][][] = new int[3][4][6];
Int aa[][] = {{0,1,2},{3,4,5},{6,7,8}}
Int bb[][] = {
{0,1,2},
{3,4,5},
{6,7,8}
};
Int cc[][] = {
{0,1,2},
{3,4,5},
{6,7,8},
};
3.5 다차원 배열
비구형 배열 : 보통 다차원 배열은 직사각형으로 크기를 확보하지만
java의 다차원 배열은 비직사각형으로도 할 수 있다.
Int ab[][] = { { 0, 1, 2, 3},
{10,11,12,13,14},
{20, 21} };
초기화하지 않을 때는 개별적으로 new 연산자를 사용함으로써 비구형의 다차원
배열을 선언할 수 있다.
Int bc[][] = new int[3][];
bc[0] = new int[4];
bc[1] = new int[5];
bc[2] = new int[2];
2차원요소는 공백[]
bc[0][0]~bc[0][3]
bc[1][0]~bc[1][4]
bc[2][0]~bc[2][1]
bc.length = 3
bc[0].length = 4
bc[1].length = 5
bc[2].length = 2
3.5 다차원 배열
3.6 문자열 배열과 초기화
문자열을 배열로 표현할 때는 String형을 이용한다.
String
aa[0]
aa[1]
aa[2]
aa[] = new String[3];
= “aaaaa”;
= “bbbbb”;
= “ccccc”;
String bb[] = {
“xxxxx”,
“yyyyy”,
“zzzzz” }