반응형
다차원 배열
2차원 배열 ?
수학의 행렬을 떠올리면 이해하기 쉬운데
가로인덱스와 세로인덱스를 사용한다.
int[][] scores = new int [2][3];
위와같은 코드를 사용하면 2행,3열의 배열이 만들어진다.
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
이 때, 스택영역에는 scores변수가 생성되고
힙 영역에 int 타입 배열 A, int 타입 배열 B, int 타입 배열 C 세 개의 배열객체를 생성한다.
//각각의 길이는
scores.lenght //2(A길이)
scores[0].lenght //3(B길이) 0번째 행의 길이
scores[1].lenght //3(C길이) 1번째 행의 길이
자바는 일차원 배열이 서로 연결된 구조로 다차원 배열을 구현하기 때문에 계단식 구조를 가질 수 있다.
int[][] scores = new int[2][];
scores[0] = new int[2]
scores[1] = new int[3]
//이때 각각 길이는
scores.lenght //2(A길이)
scores[0].lenght //2(B길이) 0번째 행의 길이
scores[1].lenght //3(C길이) 1번째 행의 길이
이런 형태의 배열은 배열의 길이를 정확하게 알고 인덱스를 사용해야한다.
그렇지 않으면 ArrayIndexOutOfBoundsException 오류를 발생시킨다.
객체를 참조하는 배열
String은 클래스 타입이므로 String[]배열은 각 항목에 문자열 값이 아닌 String 객체의 주소를 가지고 있다.
String[] strArray = new String[3];
strArray[0] = "java";
strArray[1] = "C++";
strArray[2] = "C#";
위 코드를 그림으로 표현하면
따라서 String[] 배열의 항복도 String 변수와 동일하게 취급되어야 한다.
String[] strArray = new String[3];
strArray[0] = "java";
strArray[1] = "java";
strArray[2] = new String("java");
System.out.println(strArray[0] == strArray[1]); //true
System.out.println(strArray[0] == strArray[2]); //false
System.out.println(strArray[0].equals(strArray[2])); //true
배열복사 System.arraycopy()
배열은 한 번 크기를 생성하면 변경할 수 없기 때문에
더 많은 공간이 필요하면 큰 배열을 새로 만들고 이전 값을 복사해야함
System.arraycopy)objext src, intsrcPos, object dest, int destPos, int length);
src : 원본배열
srcPos : 원본 배열에서 복사할 항목의 시작 인덱스
dest : 새 배열
destPos : 새 배열에서 붙여넣을 시작 인덱스
length : 복사할 개수
String[] oldArr = {"java", "c++", "c#"};
String[] newArr = new String[5];
System.arraycopy(oldArr, 0, newArr, 0, oldArr.length);
for(int i = 0; i<newArr.length; i++){
System.out.print(newArr[i]+",");
}
//java,c++,c#,null,null,
복사되지 않은 항목은 String[]배열의 기본값인 null이 그대로 유지됨
반응형
'STUDY > JAVA' 카테고리의 다른 글
JAVA - 열거타입 (0) | 2022.04.13 |
---|---|
JAVA - 향상된 for문 (0) | 2022.04.13 |
JAVA - 배열 1 (0) | 2022.04.13 |
jAVA - 데이터 타입 분류/메모리 사용 영역 (0) | 2022.04.12 |
JAVA 연산자 (0) | 2022.04.11 |